我有一个让我发疯的问题 . 我有一个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上构建时 .

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