我有一个让我发疯的问题。 我是一个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上构建时。
那么,如何告诉链接器完成它的工作并包含这个库?