C动态库

时间:2015-07-30 14:34:35

标签: gcc linker undefined-symbol dynamic-library

我有一个让我发疯的问题。 我是一个Ubuntu开发者机器。 我已经下载了一个工具包,并将它包含在我的C项目(eclipse)中。 好吧,如果我在centos VM上使用eclipse构建项目,那么复制到ubuntu系统的结果应用程序运行良好。在centos机器上,命令可以随时生成工作应用程序。

如果我在ubuntu机器上复制项目,包括makefile,并通过make命令重建(makefile不会改变!!!!!!!),那么构建的应用程序就会有一个"符号查找错误:....未定义符号...."

未找到的功能已声明' (但没有实现)进入一个库(包含在工具包中,而不是我的生产!!!)并实现到另一个库中(总是明确地放入工具包中)。

WHY ????最重要的是,如何解决?我应该在链接时包含这些动态库吗? (但是makefile是一样的!)

相同的makefile 两个不同的OS,make不起作用 两个不同的OS,复制的应用程序和相关的库,它的工作

非常感谢...一杯啤酒(在不来梅)让我明白我在做什么......

我添加了更多详细信息:

cmd(在ubuntu和centos上相同):

gcc -L/home/andrea/put/lib -o "put" ./main.o -ltrek_toolkit_ds_api -ltrek_toolkit_common_api -ltrek_toolkit_cfdp_api -lcfdp_plus -lrt

gcc版本:

gcc (Ubuntu 4.8.4-2ubuntu1~14.04) 4.8.4 [NOT WORKING]
gcc (GCC) 4,8,3 20140911 (Red Hat 4,8,3-9) [WORKING]

ldd穿上了Ubuntu:

    linux-vdso.so.1 =>  (0x00007ffd26b15000)
libtrek_toolkit_ds_api.so.0 => not found

libtrek_toolkit_common_api.so.0 => not found

libtrek_toolkit_cfdp_api.so.0 => not found

librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f23d29cb000)

libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f23d2606000)

libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f23d23e8000)

/lib64/ld-linux-x86-64.so.2 (0x00007f23d2bd3000)

ldd穿上Centos:

linux-vdso.so.1 =>  (0x00007fffdd569000)

libtrek_toolkit_ds_api.so.0 => not found

libtrek_toolkit_common_api.so.0 => not found

libtrek_toolkit_cfdp_api.so.0 => not found


libcfdp_plus.so.0 => not found
<--- !!! this is the difference !!!

librt.so.1 => /lib64/librt.so.1 (0x00007f158e0c9000)

libc.so.6 => /lib64/libc.so.6 (0x00007f158dd08000)

libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f158daec000)

/lib64/ld-linux-x86-64.so.2 (0x00007f158e2fb000)

尝试使用Ubuntu(不能再工作了):

gcc -L/home/andrea/put/lib -o "put" ./main.o -ltrek_toolkit_ds_api -ltrek_toolkit_common_api -ltrek_toolkit_cfdp_api -Wl,--whole-archive -lcfdp_plus -Wl,--no-whole-archive -lrt

错误:

./put: symbol lookup error: /home/andrea/put/lib/libtrek_cfdp_device_api.so: undefined symbol: register_printf_debug

&#34; register_printf_debug&#34;包含在库cfdp_plus中,包含在基于centos构建时,而不是在Ubuntu上构建时。

那么,如何告诉链接器完成它的工作并包含这个库?

0 个答案:

没有答案