我在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二进制文件。
答案 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
时,它将产生您正在获取的错误消息。