2015-10-06 140 views
0

我试图编译和链接一些.c文件。我一直在使用Eclipse IDE作为C/C++开发人员,在我的本地机器上,我可以毫无问题地进行编译。但是,当我尝试编译和链接RedHat操作系统中的相同文件(gcc版本是4.9.2-6在这个操作系统)我有问题。我在编译时得到了一些警告,但这些都很好,我认为,我只是忽略了,应用程序仍然运行良好。这里是我执行的命令和相关的输出:与共享库链接

gcc -O0 -g3 -Wall -c -fmessage-length=0 -std=c99 -MMD -MP -MF"example.d" -MT"example.d" -o "example.o" "example.c" 

warning: suggest parentheses around assignment used as truth value [-Wparentheses] 
warning: implicit declaration of function ‘wait’ [-Wimplicit-function-declaration] 

这会生成两个文件example.d和example.o。然后,我试图把它们联系起来,没有运气,用下面的命令:

gcc -Xlinker -L/usr/lib -lrt -static -pthread example.o -o example 
/usr/bin/ld: cannot find -lrt 
/usr/bin/ld: cannot find -lpthread 
/usr/bin/ld: cannot find -lc 
collect2: error: ld returned 1 exit status 

的命令采取直接从Eclipse中生成的,并且工作在我的本地计算机(Ubuntu的OS)就好了,但不是在RedHat环境。最后的命令不起作用,有和没有-L选项。我想在-L目录是好的,因为我运行,例如,

locate libpthread.so 

,我得到的位置之一是/ usr/lib目录(也是在/ usr/lib64下,但是没有工作)。

任何帮助将不胜感激! :)

回答

2

如果您尝试链接静态可执行文件,它将查找*.a版本的库,而不是您通常想要的。删除-static标志。或者你可以安装静态库,如果你真的想。它也不应该明确地添加-L/usr/lib

+0

这正是问题所在。一旦我放下了 - 静止的旗帜,一切都奏效了,谢谢! :) – Lucia