libuuid是一个开源的用于生成UUID(Universally Unique Identifier,通用唯一标识符)的库。
可从https://sourceforge.net/projects/libuuid/ 下载,最新版本为1.0.3,更新于2013年4月27日,此库仅支持在类Linux下编译使用。
之前在Windows上,我们产生guid(uuid在Windows上的叫法,是一个东西)可以使用API函数CoCreateGuid。
CrossGuid是一个最小的跨平台C ++ GUID库。它在给定平台上使用最好的本机GUID / UUID生成器,并具有用于解析,字符串化和比较ID的通用类。
可从https://github.com/graeme-hill/crossguid下载使用
接下来,我们在linux ubuntu上编译学习以下这两个库:
- libuuid
libuuid已经为我们提供了configure,直接./configure & make & make install三部曲即可,最终编译生成libuuid.a供程序链接使用,自带的一个C测试例子test_uuid.c,全部的终端执行如下:
Shell code
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 |
michael@ubuntu:~/git$ cd ./libuuid-1.0.3/
michael@ubuntu:~/git/libuuid-1.0.3$ ls aclocal.m4 config.h.in depcomp Makefile.in test_uuid.c uuidP.h all-io.h config.sub gen_uuid.c missing unpack.c uuid_time.c c.h configure install-sh pack.c unparse.c clear.c configure.ac isnull.c parse.c uuidd.h compare.c copy.c ltmain.sh randutils.c uuid.h config.guess COPYING Makefile.am randutils.h uuid.pc.in michael@ubuntu:~/git/libuuid-1.0.3$ ./configure checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking for a thread-safe mkdir -p... /bin/mkdir -p checking for gawk... no checking for mawk... mawk checking whether make sets $(MAKE)... yes checking whether make supports nested variables... yes checking build system type... x86_64-unknown-linux-gnu checking host system type... x86_64-unknown-linux-gnu checking how to print strings... printf checking for style of include used by make... GNU checking for gcc... gcc checking whether the C compiler works... yes checking for C compiler default output file name... a.out checking for suffix of executables... checking whether we are cross compiling... no checking for suffix of object files... o checking whether we are using the GNU C compiler... yes checking whether gcc accepts -g... yes checking for gcc option to accept ISO C89... none needed checking dependency style of gcc... gcc3 checking for a sed that does not truncate output... /bin/sed checking for grep that handles long lines and -e... /bin/grep checking for egrep... /bin/grep -E checking for fgrep... /bin/grep -F checking for ld used by gcc... /usr/bin/ld checking if the linker (/usr/bin/ld) is GNU ld... yes checking for BSD- or MS-compatible name lister (nm)... /usr/bin/nm -B checking the name lister (/usr/bin/nm -B) interface... BSD nm checking whether ln -s works... yes checking the maximum length of command line arguments... 1572864 checking whether the shell understands some XSI constructs... yes checking whether the shell understands "+="... yes checking how to convert x86_64-unknown-linux-gnu file names to x86_64-unknown-linux-gnu format... func_convert_file_noop checking how to convert x86_64-unknown-linux-gnu file names to toolchain format... func_convert_file_noop checking for /usr/bin/ld option to reload object files... -r checking for objdump... objdump checking how to recognize dependent libraries... pass_all checking for dlltool... no checking how to associate runtime and link libraries... printf %s checking for ar... ar checking for archiver @FILE support... @ checking for strip... strip checking for ranlib... ranlib checking command to parse /usr/bin/nm -B output from gcc object... ok checking for sysroot... no checking for mt... mt checking if mt is a manifest tool... no checking how to run the C preprocessor... gcc -E checking for ANSI C header files... yes checking for sys/types.h... yes checking for sys/stat.h... yes checking for stdlib.h... yes checking for string.h... yes checking for memory.h... yes checking for strings.h... yes checking for inttypes.h... yes checking for stdint.h... yes checking for unistd.h... yes checking for dlfcn.h... yes checking for objdir... .libs checking if gcc supports -fno-rtti -fno-exceptions... no checking for gcc option to produce PIC... -fPIC -DPIC checking if gcc PIC flag -fPIC -DPIC works... yes checking if gcc static flag -static works... yes checking if gcc supports -c -o file.o... yes checking if gcc supports -c -o file.o... (cached) yes checking whether the gcc linker (/usr/bin/ld -m elf_x86_64) supports shared libraries... yes checking whether -lc should be explicitly linked in... no checking dynamic linker characteristics... GNU/Linux ld.so checking how to hardcode library paths into programs... immediate checking whether stripping libraries is possible... yes checking if libtool supports shared libraries... yes checking whether to build shared libraries... yes checking whether to build static libraries... yes checking for gcc... (cached) gcc checking whether we are using the GNU C compiler... (cached) yes checking whether gcc accepts -g... (cached) yes checking for gcc option to accept ISO C89... (cached) none needed checking dependency style of gcc... (cached) gcc3 checking for library containing socket... none required checking fcntl.h usability... yes checking fcntl.h presence... yes checking for fcntl.h... yes checking for inttypes.h... (cached) yes checking limits.h usability... yes checking limits.h presence... yes checking for limits.h... yes checking netinet/in.h usability... yes checking netinet/in.h presence... yes checking for netinet/in.h... yes checking for stdlib.h... (cached) yes checking for string.h... (cached) yes checking sys/file.h usability... yes checking sys/file.h presence... yes checking for sys/file.h... yes checking sys/ioctl.h usability... yes checking sys/ioctl.h presence... yes checking for sys/ioctl.h... yes checking sys/socket.h usability... yes checking sys/socket.h presence... yes checking for sys/socket.h... yes checking sys/time.h usability... yes checking sys/time.h presence... yes checking for sys/time.h... yes checking for unistd.h... (cached) yes checking whether _SC_HOST_NAME_MAX is declared... yes checking for int32_t... yes checking for mode_t... yes checking for size_t... yes checking for ssize_t... yes checking for uint16_t... yes checking for uint32_t... yes checking for uint64_t... yes checking for uint8_t... yes checking for ftruncate... yes checking for gettimeofday... yes checking for memset... yes checking for socket... yes checking for strtoul... yes checking for usleep... yes checking for srandom... yes checking that generated files are newer than configure... done configure: creating ./config.status config.status: creating Makefile config.status: creating uuid.pc config.status: creating config.h config.status: executing depfiles commands config.status: executing libtool commands michael@ubuntu:~/git/libuuid-1.0.3$ make make all-am make[1]: Entering directory '/home/michael/git/libuuid-1.0.3' /bin/bash ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I. -g -O2 -MT libuuid_la-clear.lo -MD -MP -MF .deps/libuuid_la-clear.Tpo -c -o libuuid_la-clear.lo `test -f 'clear.c' || echo './'`clear.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I. -g -O2 -MT libuuid_la-clear.lo -MD -MP -MF .deps/libuuid_la-clear.Tpo -c clear.c -fPIC -DPIC -o .libs/libuuid_la-clear.o libtool: compile: gcc -DHAVE_CONFIG_H -I. -I. -g -O2 -MT libuuid_la-clear.lo -MD -MP -MF .deps/libuuid_la-clear.Tpo -c clear.c -o libuuid_la-clear.o >/dev/null 2>&1 mv -f .deps/libuuid_la-clear.Tpo .deps/libuuid_la-clear.Plo /bin/bash ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I. -g -O2 -MT libuuid_la-compare.lo -MD -MP -MF .deps/libuuid_la-compare.Tpo -c -o libuuid_la-compare.lo `test -f 'compare.c' || echo './'`compare.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I. -g -O2 -MT libuuid_la-compare.lo -MD -MP -MF .deps/libuuid_la-compare.Tpo -c compare.c -fPIC -DPIC -o .libs/libuuid_la-compare.o libtool: compile: gcc -DHAVE_CONFIG_H -I. -I. -g -O2 -MT libuuid_la-compare.lo -MD -MP -MF .deps/libuuid_la-compare.Tpo -c compare.c -o libuuid_la-compare.o >/dev/null 2>&1 mv -f .deps/libuuid_la-compare.Tpo .deps/libuuid_la-compare.Plo /bin/bash ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I. -g -O2 -MT libuuid_la-copy.lo -MD -MP -MF .deps/libuuid_la-copy.Tpo -c -o libuuid_la-copy.lo `test -f 'copy.c' || echo './'`copy.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I. -g -O2 -MT libuuid_la-copy.lo -MD -MP -MF .deps/libuuid_la-copy.Tpo -c copy.c -fPIC -DPIC -o .libs/libuuid_la-copy.o libtool: compile: gcc -DHAVE_CONFIG_H -I. -I. -g -O2 -MT libuuid_la-copy.lo -MD -MP -MF .deps/libuuid_la-copy.Tpo -c copy.c -o libuuid_la-copy.o >/dev/null 2>&1 mv -f .deps/libuuid_la-copy.Tpo .deps/libuuid_la-copy.Plo /bin/bash ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I. -g -O2 -MT libuuid_la-gen_uuid.lo -MD -MP -MF .deps/libuuid_la-gen_uuid.Tpo -c -o libuuid_la-gen_uuid.lo `test -f 'gen_uuid.c' || echo './'`gen_uuid.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I. -g -O2 -MT libuuid_la-gen_uuid.lo -MD -MP -MF .deps/libuuid_la-gen_uuid.Tpo -c gen_uuid.c -fPIC -DPIC -o .libs/libuuid_la-gen_uuid.o In file included from /usr/include/x86_64-linux-gnu/bits/libc-header-start.h:33, from /usr/include/stdio.h:27, from gen_uuid.c:46: /usr/include/features.h:184:3: warning: #warning "_BSD_SOURCE and _SVID_SOURCE are deprecated, use _DEFAULT_SOURCE" [-Wcpp] # warning "_BSD_SOURCE and _SVID_SOURCE are deprecated, use _DEFAULT_SOURCE" ^~~~~~~ gen_uuid.c: In function 'get_clock': gen_uuid.c:297:10: warning: implicit declaration of function 'flock'; did you mean 'clock'? [-Wimplicit-function-declaration] while (flock(state_fd, LOCK_EX) < 0) { ^~~~~ clock libtool: compile: gcc -DHAVE_CONFIG_H -I. -I. -g -O2 -MT libuuid_la-gen_uuid.lo -MD -MP -MF .deps/libuuid_la-gen_uuid.Tpo -c gen_uuid.c -o libuuid_la-gen_uuid.o >/dev/null 2>&1 mv -f .deps/libuuid_la-gen_uuid.Tpo .deps/libuuid_la-gen_uuid.Plo /bin/bash ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I. -g -O2 -MT libuuid_la-isnull.lo -MD -MP -MF .deps/libuuid_la-isnull.Tpo -c -o libuuid_la-isnull.lo `test -f 'isnull.c' || echo './'`isnull.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I. -g -O2 -MT libuuid_la-isnull.lo -MD -MP -MF .deps/libuuid_la-isnull.Tpo -c isnull.c -fPIC -DPIC -o .libs/libuuid_la-isnull.o libtool: compile: gcc -DHAVE_CONFIG_H -I. -I. -g -O2 -MT libuuid_la-isnull.lo -MD -MP -MF .deps/libuuid_la-isnull.Tpo -c isnull.c -o libuuid_la-isnull.o >/dev/null 2>&1 mv -f .deps/libuuid_la-isnull.Tpo .deps/libuuid_la-isnull.Plo /bin/bash ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I. -g -O2 -MT libuuid_la-pack.lo -MD -MP -MF .deps/libuuid_la-pack.Tpo -c -o libuuid_la-pack.lo `test -f 'pack.c' || echo './'`pack.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I. -g -O2 -MT libuuid_la-pack.lo -MD -MP -MF .deps/libuuid_la-pack.Tpo -c pack.c -fPIC -DPIC -o .libs/libuuid_la-pack.o libtool: compile: gcc -DHAVE_CONFIG_H -I. -I. -g -O2 -MT libuuid_la-pack.lo -MD -MP -MF .deps/libuuid_la-pack.Tpo -c pack.c -o libuuid_la-pack.o >/dev/null 2>&1 mv -f .deps/libuuid_la-pack.Tpo .deps/libuuid_la-pack.Plo /bin/bash ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I. -g -O2 -MT libuuid_la-parse.lo -MD -MP -MF .deps/libuuid_la-parse.Tpo -c -o libuuid_la-parse.lo `test -f 'parse.c' || echo './'`parse.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I. -g -O2 -MT libuuid_la-parse.lo -MD -MP -MF .deps/libuuid_la-parse.Tpo -c parse.c -fPIC -DPIC -o .libs/libuuid_la-parse.o libtool: compile: gcc -DHAVE_CONFIG_H -I. -I. -g -O2 -MT libuuid_la-parse.lo -MD -MP -MF .deps/libuuid_la-parse.Tpo -c parse.c -o libuuid_la-parse.o >/dev/null 2>&1 mv -f .deps/libuuid_la-parse.Tpo .deps/libuuid_la-parse.Plo /bin/bash ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I. -g -O2 -MT libuuid_la-unpack.lo -MD -MP -MF .deps/libuuid_la-unpack.Tpo -c -o libuuid_la-unpack.lo `test -f 'unpack.c' || echo './'`unpack.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I. -g -O2 -MT libuuid_la-unpack.lo -MD -MP -MF .deps/libuuid_la-unpack.Tpo -c unpack.c -fPIC -DPIC -o .libs/libuuid_la-unpack.o libtool: compile: gcc -DHAVE_CONFIG_H -I. -I. -g -O2 -MT libuuid_la-unpack.lo -MD -MP -MF .deps/libuuid_la-unpack.Tpo -c unpack.c -o libuuid_la-unpack.o >/dev/null 2>&1 mv -f .deps/libuuid_la-unpack.Tpo .deps/libuuid_la-unpack.Plo /bin/bash ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I. -g -O2 -MT libuuid_la-unparse.lo -MD -MP -MF .deps/libuuid_la-unparse.Tpo -c -o libuuid_la-unparse.lo `test -f 'unparse.c' || echo './'`unparse.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I. -g -O2 -MT libuuid_la-unparse.lo -MD -MP -MF .deps/libuuid_la-unparse.Tpo -c unparse.c -fPIC -DPIC -o .libs/libuuid_la-unparse.o libtool: compile: gcc -DHAVE_CONFIG_H -I. -I. -g -O2 -MT libuuid_la-unparse.lo -MD -MP -MF .deps/libuuid_la-unparse.Tpo -c unparse.c -o libuuid_la-unparse.o >/dev/null 2>&1 mv -f .deps/libuuid_la-unparse.Tpo .deps/libuuid_la-unparse.Plo /bin/bash ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I. -g -O2 -MT libuuid_la-uuid_time.lo -MD -MP -MF .deps/libuuid_la-uuid_time.Tpo -c -o libuuid_la-uuid_time.lo `test -f 'uuid_time.c' || echo './'`uuid_time.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I. -g -O2 -MT libuuid_la-uuid_time.lo -MD -MP -MF .deps/libuuid_la-uuid_time.Tpo -c uuid_time.c -fPIC -DPIC -o .libs/libuuid_la-uuid_time.o libtool: compile: gcc -DHAVE_CONFIG_H -I. -I. -g -O2 -MT libuuid_la-uuid_time.lo -MD -MP -MF .deps/libuuid_la-uuid_time.Tpo -c uuid_time.c -o libuuid_la-uuid_time.o >/dev/null 2>&1 mv -f .deps/libuuid_la-uuid_time.Tpo .deps/libuuid_la-uuid_time.Plo /bin/bash ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I. -g -O2 -MT libuuid_la-randutils.lo -MD -MP -MF .deps/libuuid_la-randutils.Tpo -c -o libuuid_la-randutils.lo `test -f 'randutils.c' || echo './'`randutils.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I. -g -O2 -MT libuuid_la-randutils.lo -MD -MP -MF .deps/libuuid_la-randutils.Tpo -c randutils.c -fPIC -DPIC -o .libs/libuuid_la-randutils.o libtool: compile: gcc -DHAVE_CONFIG_H -I. -I. -g -O2 -MT libuuid_la-randutils.lo -MD -MP -MF .deps/libuuid_la-randutils.Tpo -c randutils.c -o libuuid_la-randutils.o >/dev/null 2>&1 mv -f .deps/libuuid_la-randutils.Tpo .deps/libuuid_la-randutils.Plo /bin/bash ./libtool --tag=CC --mode=link gcc -I. -g -O2 -version-info 1:0:0 -o libuuid.la -rpath /usr/local/lib libuuid_la-clear.lo libuuid_la-compare.lo libuuid_la-copy.lo libuuid_la-gen_uuid.lo libuuid_la-isnull.lo libuuid_la-pack.lo libuuid_la-parse.lo libuuid_la-unpack.lo libuuid_la-unparse.lo libuuid_la-uuid_time.lo libuuid_la-randutils.lo libtool: link: gcc -shared -fPIC -DPIC .libs/libuuid_la-clear.o .libs/libuuid_la-compare.o .libs/libuuid_la-copy.o .libs/libuuid_la-gen_uuid.o .libs/libuuid_la-isnull.o .libs/libuuid_la-pack.o .libs/libuuid_la-parse.o .libs/libuuid_la-unpack.o .libs/libuuid_la-unparse.o .libs/libuuid_la-uuid_time.o .libs/libuuid_la-randutils.o -O2 -Wl,-soname -Wl,libuuid.so.1 -o .libs/libuuid.so.1.0.0 libtool: link: (cd ".libs" && rm -f "libuuid.so.1" && ln -s "libuuid.so.1.0.0" "libuuid.so.1") libtool: link: (cd ".libs" && rm -f "libuuid.so" && ln -s "libuuid.so.1.0.0" "libuuid.so") libtool: link: ar cru .libs/libuuid.a libuuid_la-clear.o libuuid_la-compare.o libuuid_la-copy.o libuuid_la-gen_uuid.o libuuid_la-isnull.o libuuid_la-pack.o libuuid_la-parse.o libuuid_la-unpack.o libuuid_la-unparse.o libuuid_la-uuid_time.o libuuid_la-randutils.o ar: `u' modifier ignored since `D' is the default (see `U') libtool: link: ranlib .libs/libuuid.a libtool: link: ( cd ".libs" && rm -f "libuuid.la" && ln -s "../libuuid.la" "libuuid.la" ) make[1]: Leaving directory '/home/michael/git/libuuid-1.0.3' michael@ubuntu:~/git/libuuid-1.0.3$ make install make[1]: Entering directory '/home/michael/git/libuuid-1.0.3' /bin/mkdir -p '/usr/local/lib' /bin/bash ./libtool --mode=install /usr/bin/install -c libuuid.la '/usr/local/lib' libtool: install: /usr/bin/install -c .libs/libuuid.so.1.0.0 /usr/local/lib/libuuid.so.1.0.0 /usr/bin/install: cannot create regular file '/usr/local/lib/libuuid.so.1.0.0': Permission denied make[1]: *** [Makefile:446: install-libLTLIBRARIES] Error 1 make[1]: Leaving directory '/home/michael/git/libuuid-1.0.3' make: *** [Makefile:906: install-am] Error 2 michael@ubuntu:~/git/libuuid-1.0.3$ sudo make install [sudo] password for michael: make[1]: Entering directory '/home/michael/git/libuuid-1.0.3' /bin/mkdir -p '/usr/local/lib' /bin/bash ./libtool --mode=install /usr/bin/install -c libuuid.la '/usr/local/lib' libtool: install: /usr/bin/install -c .libs/libuuid.so.1.0.0 /usr/local/lib/libuuid.so.1.0.0 libtool: install: (cd /usr/local/lib && { ln -s -f libuuid.so.1.0.0 libuuid.so.1 || { rm -f libuuid.so.1 && ln -s libuuid.so.1.0.0 libuuid.so.1; }; }) libtool: install: (cd /usr/local/lib && { ln -s -f libuuid.so.1.0.0 libuuid.so || { rm -f libuuid.so && ln -s libuuid.so.1.0.0 libuuid.so; }; }) libtool: install: /usr/bin/install -c .libs/libuuid.lai /usr/local/lib/libuuid.la libtool: install: /usr/bin/install -c .libs/libuuid.a /usr/local/lib/libuuid.a libtool: install: chmod 644 /usr/local/lib/libuuid.a libtool: install: ranlib /usr/local/lib/libuuid.a libtool: finish: PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin:/sbin" ldconfig -n /usr/local/lib ---------------------------------------------------------------------- Libraries have been installed in: /usr/local/lib If you ever happen to want to link against installed libraries in a given directory, LIBDIR, you must either use libtool, and specify the full pathname of the library, or use the `-LLIBDIR' flag during linking and do at least one of the following: - add LIBDIR to the `LD_LIBRARY_PATH' environment variable during execution - add LIBDIR to the `LD_RUN_PATH' environment variable during linking - use the `-Wl,-rpath -Wl,LIBDIR' linker flag - have your system administrator add LIBDIR to `/etc/ld.so.conf' See any operating system documentation about shared libraries for more information, such as the ld(1) and ld.so(8) manual pages. ---------------------------------------------------------------------- /bin/mkdir -p '/usr/local/lib/pkgconfig' /usr/bin/install -c -m 644 uuid.pc '/usr/local/lib/pkgconfig' /bin/mkdir -p '/usr/local/include/uuid' /usr/bin/install -c -m 644 uuid.h '/usr/local/include/uuid' make[1]: Leaving directory '/home/michael/git/libuuid-1.0.3' michael@ubuntu:~/git/libuuid-1.0.3$ ls aclocal.m4 gen_uuid.c libuuid_la-pack.o pack.c all-io.h install-sh libuuid_la-parse.lo parse.c c.h isnull.c libuuid_la-parse.o randutils.c clear.c libtool libuuid_la-randutils.lo randutils.h compare.c libuuid.la libuuid_la-randutils.o stamp-h1 config.guess libuuid_la-clear.lo libuuid_la-unpack.lo test_uuid.c config.h libuuid_la-clear.o libuuid_la-unpack.o unpack.c config.h.in libuuid_la-compare.lo libuuid_la-unparse.lo unparse.c config.log libuuid_la-compare.o libuuid_la-unparse.o uuidd.h config.status libuuid_la-copy.lo libuuid_la-uuid_time.lo uuid.h config.sub libuuid_la-copy.o libuuid_la-uuid_time.o uuid.pc configure libuuid_la-gen_uuid.lo ltmain.sh uuid.pc.in configure.ac libuuid_la-gen_uuid.o Makefile uuidP.h copy.c libuuid_la-isnull.lo Makefile.am uuid_time.c COPYING libuuid_la-isnull.o Makefile.in depcomp libuuid_la-pack.lo missing michael@ubuntu:~/git/libuuid-1.0.3$ vim ./test_uuid.c michael@ubuntu:~/git/libuuid-1.0.3$ gcc test_uuid.c -o test_uuid /usr/bin/ld: /tmp/ccRUh9Vk.o: in function `test_uuid': test_uuid.c:(.text+0x2d): undefined reference to `uuid_parse' /usr/bin/ld: /tmp/ccRUh9Vk.o: in function `main': test_uuid.c:(.text+0x10a): undefined reference to `uuid_generate' /usr/bin/ld: test_uuid.c:(.text+0x120): undefined reference to `uuid_unparse' /usr/bin/ld: test_uuid.c:(.text+0x1b7): undefined reference to `uuid_type' /usr/bin/ld: test_uuid.c:(.text+0x1cc): undefined reference to `uuid_variant' /usr/bin/ld: test_uuid.c:(.text+0x226): undefined reference to `uuid_generate_random' /usr/bin/ld: test_uuid.c:(.text+0x23c): undefined reference to `uuid_unparse' /usr/bin/ld: test_uuid.c:(.text+0x2d3): undefined reference to `uuid_type' /usr/bin/ld: test_uuid.c:(.text+0x2e8): undefined reference to `uuid_variant' /usr/bin/ld: test_uuid.c:(.text+0x35e): undefined reference to `uuid_generate_time' /usr/bin/ld: test_uuid.c:(.text+0x374): undefined reference to `uuid_unparse' /usr/bin/ld: test_uuid.c:(.text+0x40b): undefined reference to `uuid_type' /usr/bin/ld: test_uuid.c:(.text+0x420): undefined reference to `uuid_variant' /usr/bin/ld: test_uuid.c:(.text+0x4b1): undefined reference to `uuid_time' /usr/bin/ld: test_uuid.c:(.text+0x4ff): undefined reference to `uuid_parse' /usr/bin/ld: test_uuid.c:(.text+0x515): undefined reference to `uuid_compare' /usr/bin/ld: test_uuid.c:(.text+0x546): undefined reference to `uuid_clear' /usr/bin/ld: test_uuid.c:(.text+0x552): undefined reference to `uuid_is_null' /usr/bin/ld: test_uuid.c:(.text+0x58d): undefined reference to `uuid_copy' /usr/bin/ld: test_uuid.c:(.text+0x5a3): undefined reference to `uuid_compare' collect2: error: ld returned 1 exit status michael@ubuntu:~/git/libuuid-1.0.3$ cd /usr/local/lib michael@ubuntu:/usr/local/lib$ ls lib3ds-1.so.3 lib3ds.la libuuid.la libuuid.so.1.0.0 python3.6 lib3ds-1.so.3.0.0 lib3ds.so libuuid.so pkgconfig lib3ds.a libuuid.a libuuid.so.1 python2.7 michael@ubuntu:/usr/local/lib$ cd ~/git/libuuid-1.0.3/ michael@ubuntu:~/git/libuuid-1.0.3$ gcc test_uuid.c -luuid -o test_uuid michael@ubuntu:~/git/libuuid-1.0.3$ ls aclocal.m4 gen_uuid.c libuuid_la-pack.o pack.c all-io.h install-sh libuuid_la-parse.lo parse.c c.h isnull.c libuuid_la-parse.o randutils.c clear.c libtool libuuid_la-randutils.lo randutils.h compare.c libuuid.la libuuid_la-randutils.o stamp-h1 config.guess libuuid_la-clear.lo libuuid_la-unpack.lo test_uuid config.h libuuid_la-clear.o libuuid_la-unpack.o test_uuid.c config.h.in libuuid_la-compare.lo libuuid_la-unparse.lo unpack.c config.log libuuid_la-compare.o libuuid_la-unparse.o unparse.c config.status libuuid_la-copy.lo libuuid_la-uuid_time.lo uuidd.h config.sub libuuid_la-copy.o libuuid_la-uuid_time.o uuid.h configure libuuid_la-gen_uuid.lo ltmain.sh uuid.pc configure.ac libuuid_la-gen_uuid.o Makefile uuid.pc.in copy.c libuuid_la-isnull.lo Makefile.am uuidP.h COPYING libuuid_la-isnull.o Makefile.in uuid_time.c depcomp libuuid_la-pack.lo missing michael@ubuntu:~/git/libuuid-1.0.3$ ./test_uuid UUID generate = 53ead8bd-e562-4e79-bf6a-4e7cbf4c331d UUID: 53ead8bde5624e79bf6a4e7cbf4c331d UUID type = 4, UUID variant = 1 UUID random string = dacba404-2350-47c3-b8de-f451f843b849 UUID: dacba404235047c3b8def451f843b849 UUID type = 4, UUID variant = 1 UUID string = 6c7dffbe-d07d-11e9-9d41-000c2977e04e UUID time: 6c7dffbed07d11e99d41000c2977e04e UUID type = 1, UUID variant = 1 UUID time is: (1567757272, 119699): Fri Sep 6 16:07:52 2019 UUID parse and compare succeeded. UUID clear and is null succeeded. UUID copy and compare succeeded. 84949cc5-4701-4a84-895b-354c584a981b is valid, OK 84949CC5-4701-4A84-895B-354C584A981B is valid, OK 84949cc5-4701-4a84-895b-354c584a981bc is invalid, OK 84949cc5-4701-4a84-895b-354c584a981 is invalid, OK 84949cc5x4701-4a84-895b-354c584a981b is invalid, OK 84949cc504701-4a84-895b-354c584a981b is invalid, OK 84949cc5-470104a84-895b-354c584a981b is invalid, OK 84949cc5-4701-4a840895b-354c584a981b is invalid, OK 84949cc5-4701-4a84-895b0354c584a981b is invalid, OK g4949cc5-4701-4a84-895b-354c584a981b is invalid, OK 84949cc5-4701-4a84-895b-354c584a981g is invalid, OK michael@ubuntu:~/git/libuuid-1.0.3$ |
- crossguid
crossguid则为我们提供了CMakeLists.txt,方便我们使用cmake的方式来构建,构建成功后会生成一个libcrossguid.a
静态库和测试程序 crossguid-test
,全部的终端执行如下:
Shell Code
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
michael@ubuntu:~$ cd ./git/crossguid-master/
michael@ubuntu:~/git/crossguid-master$ ls android cmake crossguid.pc.in LICENSE src android.sh CMakeLists.txt include README.md test michael@ubuntu:~/git/crossguid-master$ mkdir build michael@ubuntu:~/git/crossguid-master$ cd ./build/ michael@ubuntu:~/git/crossguid-master/build$ cmake --version cmake version 3.12.1 CMake suite maintained and supported by Kitware (kitware.com/cmake). michael@ubuntu:~/git/crossguid-master/build$ cmake .. -- The C compiler identification is GNU 8.2.0 -- The CXX compiler identification is GNU 8.2.0 -- Check for working C compiler: /usr/bin/cc -- Check for working C compiler: /usr/bin/cc -- works -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Detecting C compile features -- Detecting C compile features - done -- Check for working CXX compiler: /usr/bin/c++ -- Check for working CXX compiler: /usr/bin/c++ -- works -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Detecting CXX compile features -- Detecting CXX compile features - done -- Found PkgConfig: /usr/bin/pkg-config (found version "0.29.1") -- Found LibUUID: /usr/lib/x86_64-linux-gnu/libuuid.so (found version "2.32.0") -- Configuring done -- Generating done -- Build files have been written to: /home/michael/git/crossguid-master/build michael@ubuntu:~/git/crossguid-master/build$ make Scanning dependencies of target crossguid [ 20%] Building CXX object CMakeFiles/crossguid.dir/src/guid.cpp.o [ 40%] Linking CXX static library libcrossguid.a [ 40%] Built target crossguid Scanning dependencies of target crossguid-test [ 60%] Building CXX object CMakeFiles/crossguid-test.dir/test/TestMain.cpp.o [ 80%] Building CXX object CMakeFiles/crossguid-test.dir/test/Test.cpp.o [100%] Linking CXX executable crossguid-test [100%] Built target crossguid-test michael@ubuntu:~/git/crossguid-master/build$ make install [ 40%] Built target crossguid [100%] Built target crossguid-test Install the project... -- Install configuration: "Release" -- Installing: /usr/local/lib/libcrossguid.a CMake Error at cmake_install.cmake:41 (file): file INSTALL cannot copy file "/home/michael/git/crossguid-master/build/libcrossguid.a" to "/usr/local/lib/libcrossguid.a". make: *** [Makefile:118: install] Error 1 michael@ubuntu:~/git/crossguid-master/build$ ls CMakeCache.txt cmake_install.cmake crossguid-test Makefile CMakeFiles crossguid.pc libcrossguid.a michael@ubuntu:~/git/crossguid-master/build$ ./crossguid-test 66ea935c-730c-4518-82b3-f12424544a5b 73cecead-39c4-4942-8a7e-029df3629f28 82aea220-ad0b-41d7-8c83-668a31fdcb47 All tests passed! michael@ubuntu:~/git/crossguid-master/build$ |
具体函数使用请参考官方文档,本文到此为止。