x86_64系统上的Eclipse-CDT无法链接到共享库

时间:2011-11-17 23:45:01

标签: linux shared-libraries eclipse-cdt

我在Windows上使用Eclipse-CDT编译了一些库。但是,当我尝试在linux下编译它们时,gcc不断给我错误/usr/bin/ld: cannot find -lrequestedLib。我在两个环境之间使用完全相同的构建设置(即我确保添加包含我需要链接到的库的目录)。我确信系统也具有读取文件的访问权限。我不知道该怎么做。请帮忙。

编辑:这些是ecplise运行以构建库的命令:

gcc -I/home/me/lib/ -O3 -Wall -c -fmessage-length=0 -olibToMake.o ../libToMake.c 
gcc -L/home/me/lib/ -shared -olibToMake.so libToMake.o -lrequestedLib

编辑2:呈现错误的命令是两者中的第二个,导致输出/usr/bin/ld: cannot find -lrequestedLib

编辑3:我已经确认requestedLib.so是x86_64二进制文件。

3 个答案:

答案 0 :(得分:1)

我在别处找到了这个,共享库需要lib作为ld的前缀才能找到它们。否则,他们需要以/home/me/lib/requestedLib.so添加到命令中。

参考:How to link to a shared library without lib* prefix in a different directory?

答案 1 :(得分:0)

如果您不想将-L命令行选项传递给gcc(1),请务必将包含库的路径添加到/etc/ld.so.conf/etc/ld.so.cond.d/<something>

安装完库后,您还需要手动运行ldconfig(8)。 (大多数新用户忘记了这一步,因为典型的包管理器会在安装新库时为您解决此问题。)

答案 2 :(得分:0)

  

gcc -I/home/me/lib/ -O3 -Wall -c -fmessage-length=0 -olibToMake.o ../libToMake.c
  gcc -L/home/me/lib/ -shared -olibToMake.so libToMake.o -lrequestedLib

x86_64上构建64位共享库时,通常需要-fPIC标志,否则在共享库链接时会出现recompile with -fPIC错误。

由于您没有使用-fPIC,但您的链接成功,您可能正在使用(非默认)gcc,其目标是i*86(即产生32位输出) )。您可以通过运行file libToMake.so来确认。

您没有显示实际失败的命令(产生cannot find -lrequestedLib错误的命令)。我猜那个 命令正在使用不同的gcc(默认值为?),其目标是x86_64。如果它看起来像

gcc main.c -L/home/me/lib -lrequestedLib

该命令将忽略 /home/me/lib/librequestedLib.so(因为您无法将32位和64位代码链接在一起),并将继续在其他位置搜索librequestedLib。当它找不到64位版本的librequestedLib时,它将产生您正在获取的错误消息。