c - 与共享库链接

标签 c linux eclipse gcc pthreads

我正在尝试编译和链接一些 .c 文件。我一直在为 C/C++ 开发人员使用 Eclipse IDE,在我的本地机器上我可以毫无问题地编译。但是,当我尝试在 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 操作系统)中工作得很好,但在 RedHat 环境中却不行。最后一个命令不起作用,有和没有 -L 选项。我想 -L 中的目录很好,因为我运行,例如,

locate libpthread.so 

我得到的位置之一是/usr/lib(也是/usr/lib64,但都不起作用)。

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

最佳答案

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

关于c - 与共享库链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32960194/

相关文章:

linux - 如何使用imp命令覆盖现有数据

java - 编译Izpack项目

c - 使用 snprintf 连接 c 中的段错误

c++ - 在C++中保留字符串中所需的字符

c - 尝试映射大页面 (1GB) 时 mmap 失败

c - 请告诉为什么下面程序的输出是 JKLM??而不是 MLKJ?

arrays - 在 bash 中从新行创建数组

c++ - 进程内运行线程的名称

android - 是否可以在 Eclipse Android Gui 构建器中显示按钮状态?

android - 将主项目与谷歌地图项目相结合