Cmake学习总结(三)

TXP嵌入式
关注

3、编译:

root@txp-virtual-machine:/home/txp/testcmake/build# cmake ..

-- The C compiler identification is GNU 4.8.4

-- The CXX compiler identification is GNU 4.8.4

-- 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

-- 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

-- Configuring done

-- Generating done

-- Build files have been written to: /home/txp/testcmake/build

root@txp-virtual-machine:/home/txp/testcmake/build# make

Scanning dependencies of target test1_shared

[ 33%] Building C object lib_test/CMakeFiles/test1_shared.dir/test1.c.o

Linking C shared library ../../lib/libtest1.so

[ 33%] Built target test1_shared

Scanning dependencies of target test1_static

[ 66%] Building C object lib_test/CMakeFiles/test1_static.dir/test1.c.o

Linking C static library ../../lib/libtest1.a

[ 66%] Built target test1_static

Scanning dependencies of target main

[100%] Building C object src/CMakeFiles/main.dir/main.c.o

Linking C executable ../../bin/main

[100%] Built target main

root@txp-virtual-machine:/home/txp/testcmake/build# cd ../bin

root@txp-virtual-machine:/home/txp/testcmake/bin# ls

main

root@txp-virtual-machine:/home/txp/testcmake/bin# ./main

a=6

TXP嵌入式

从上面可以执行成功。同时注意:

我们lib下面又动态库和静态库,而在我们src目录下的CMakeLists.txt里面的target_link_libraries (main test1)默认是使用动态库,如果lib目录下只有静态库,那么这种写法就会去链接静态库。也可以直接指定使用动态库还是静态库,写法是:target_link_libraries (main libtest1.so)或target_link_libraries (main libtest1.a)

同时我们可以查看elf文件到底使用了哪些库文件:

root@txp-virtual-machine:/home/txp/testcmake/bin# readelf -d ./main

Dynamic section at offset 0xe08 contains 26 entries:

Tag        Type                         Name/Value

0x0000000000000001 (NEEDED)             Shared library: [libtest1.so]

0x0000000000000001 (NEEDED)             Shared library: [libc.so.6]

0x000000000000000f (RPATH)              Library rpath: [/home/txp/testcmake/lib]

0x000000000000000c (INIT)               0x4006a0

0x000000000000000d (FINI)               0x400894

0x0000000000000019 (INIT_ARRAY)         0x600df0

0x000000000000001b (INIT_ARRAYSZ)       8 (bytes)

0x000000000000001a (FINI_ARRAY)         0x600df8

0x000000000000001c (FINI_ARRAYSZ)       8 (bytes)

0x000000006ffffef5 (GNU_HASH)           0x400298

0x0000000000000005 (STRTAB)             0x4004d8

0x0000000000000006 (SYMTAB)             0x4002f8

0x000000000000000a (STRSZ)              260 (bytes)

0x000000000000000b (SYMENT)             24 (bytes)

0x0000000000000015 (DEBUG)              0x0

0x0000000000000003 (PLTGOT)             0x601000

0x0000000000000002 (PLTRELSZ)           96 (bytes)

0x0000000000000014 (PLTREL)             RELA

0x0000000000000017 (JMPREL)             0x400640

0x0000000000000007 (RELA)               0x400628

0x0000000000000008 (RELASZ)             24 (bytes)

0x0000000000000009 (RELAENT)            24 (bytes)

0x000000006ffffffe (VERNEED)            0x400608

0x000000006fffffff (VERNEEDNUM)         1

0x000000006ffffff0 (VERSYM)             0x4005dc

0x0000000000000000 (NULL)               0x0

三、小结:

这里还有一个网友的提的那个实现,现在我们知道了怎么去使用动态库和静态库就好办了;限于篇幅原因,这个测试留在下篇cmake文章里面来做实验看看到底能不能实现(这里我暂时还没做实验,等我做完实验就会分享出来,这篇文章分享花的时间比较久,大家先暂时消化一下);更多精彩内容,我们下篇见。

Cmake学习总结(三)

声明: 本文由入驻OFweek维科号的作者撰写,观点仅代表作者本人,不代表OFweek立场。如有侵权或其他问题,请联系举报。
侵权投诉

下载OFweek,一手掌握高科技全行业资讯

还不是OFweek会员,马上注册
打开app,查看更多精彩资讯 >
  • 长按识别二维码
  • 进入OFweek阅读全文
长按图片进行保存