我有一个让我发疯的问题 . 我有一个Ubuntu开发者机器 . 我已经下载了一个工具包,并将其包含在我的C项目(eclipse)中 . 好吧,如果我在centos VM上使用eclipse构建项目,那么复制到ubuntu系统的结果应用程序运行良好 . 在centos机器上,命令可以随时生成工作应用程序 .
如果我在ubuntu机器上复制项目,包括makefile,并通过make命令重建(makefile不会改变!!!!!!!),那么构建的应用程序有一个“符号查找错误:....未定义的符号 ....”
未找到的函数被“声明”(但未实现)到库中(包含在工具包中,而不是我的 生产环境 !!!)并实现到另一个库中(总是清楚地进入工具箱) .
为什么????最重要的是,如何解决?我应该在链接时包含这些动态库吗? (但makefile是一样的!)
相同的makefile两个不同的操作系统,make不工作不同的操作系统,复制的应用程序和相关的库,它的工作原理
非常感谢...一杯啤酒(在不来梅)谁让我明白我在做什么...
我添加更多细节:
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
“register_printf_debug”包含在库cfdp_plus中,包含在构建在centos上时,而不是在Ubuntu上构建时 .
那么,如何告诉链接器完成它的工作并包含这个库?