ld:找不到库
ld: library not found for
我遇到了一个 linker 错误(编译时间,而不是 运行 时间):
ld: library not found for -l:/usr/lib/libobjc.A.dylib
这只是最新版本的错误。我正在尝试 link 反对 /usr/lib/libobjc.A.dylib
,我想对路径进行硬编码;该库保证存在于我所在平台上的这条路径上。确实如此:
bhaller@lanois % ls -l /usr/lib/libobjc.A.dylib
-rwxr-xr-x 1 root wheel 859536 Jan 23 08:59 /usr/lib/libobjc.A.dylib
我试过:
-L/usr/lib/ -llibobjc.A.dylib
-L/usr/lib/ -llibobjc.A
-l/usr/lib/libobjc.A.dylib
-l:/usr/lib/libobjc.A.dylib
在每种情况下,我都会遇到相同的错误,即 ld 找不到库。但它就在那里,我给出了它的完整路径!我错过了什么??
这是完整的调用,还有一些其他的问题:
"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld" -demangle -lto_library /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/libLTO.dylib -dynamic -arch x86_64 -headerpad_max_install_names -macosx_version_min 10.10.0 -o QtSLiM.app/Contents/MacOS/QtSLiM -L/Users/bhaller/Desktop/QtSLiM QMAKE/QtSLiM/../core/ -L/Users/bhaller/Desktop/QtSLiM QMAKE/QtSLiM/../eidos/ -L/Users/bhaller/Desktop/QtSLiM QMAKE/QtSLiM/../treerec/tskit/ -L/Users/bhaller/Desktop/QtSLiM QMAKE/QtSLiM/../gsl/ -L/Users/bhaller/Desktop/QtSLiM QMAKE/QtSLiM/../eidos_zlib/ -syslibroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk -rpath @executable_path/Frameworks -rpath /Users/bhaller/Qt5.9.8/5.9.8/clang_64/lib main.o QtSLiMWindow.o QtSLiMAppDelegate.o QtSLiMWindow_glue.o QtSLiMChromosomeWidget.o QtSLiMExtras.o QtSLiMPopulationTable.o QtSLiMIndividualsWidget.o QtSLiMEidosPrettyprinter.o QtSLiMAbout.o QtSLiMPreferences.o QtSLiMSyntaxHighlighting.o QtSLiMFindRecipe.o QtSLiMHelpWindow.o QtSLiMScriptTextEdit.o QtSLiMEidosConsole.o QtSLiMEidosConsole_glue.o QtSLiMConsoleTextEdit.o QtSLiM_SLiMgui.o QtSLiMTablesDrawer.o QtSLiMFindPanel.o QtSLiMGraphView.o QtSLiMGraphView_FixationTimeHistogram.o QtSLiMGraphView_FrequencySpectra.o QtSLiMGraphView_LossTimeHistogram.o QtSLiMGraphView_PopulationVisualization.o QtSLiMGraphView_FitnessOverTime.o QtSLiMGraphView_FrequencyTrajectory.o QtSLiMHaplotypeManager.o QtSLiMHaplotypeOptions.o QtSLiMHaplotypeProgress.o QtSLiMVariableBrowser.o qrc_buttons.o qrc_icons.o qrc_recipes.o qrc_help.o moc_QtSLiMWindow.o moc_QtSLiMAppDelegate.o moc_QtSLiMChromosomeWidget.o moc_QtSLiMExtras.o moc_QtSLiMPopulationTable.o moc_QtSLiMIndividualsWidget.o moc_QtSLiMAbout.o moc_QtSLiMPreferences.o moc_QtSLiMSyntaxHighlighting.o moc_QtSLiMFindRecipe.o moc_QtSLiMHelpWindow.o moc_QtSLiMScriptTextEdit.o moc_QtSLiMEidosConsole.o moc_QtSLiMConsoleTextEdit.o moc_QtSLiMTablesDrawer.o moc_QtSLiMFindPanel.o moc_QtSLiMGraphView.o moc_QtSLiMGraphView_FixationTimeHistogram.o moc_QtSLiMGraphView_FrequencySpectra.o moc_QtSLiMGraphView_LossTimeHistogram.o moc_QtSLiMGraphView_PopulationVisualization.o moc_QtSLiMGraphView_FitnessOverTime.o moc_QtSLiMGraphView_FrequencyTrajectory.o moc_QtSLiMHaplotypeManager.o moc_QtSLiMHaplotypeOptions.o moc_QtSLiMHaplotypeProgress.o moc_QtSLiMVariableBrowser.o -lcore -leidos -ltskit -lgsl -leidos_zlib -l:/usr/lib/libobjc.A.dylib -framework QtOpenGL -framework QtWidgets -framework QtGui -framework QtCore -framework DiskArbitration -framework IOKit -framework OpenGL -framework AGL -lc++ -lSystem /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/11.0.0/lib/darwin/libclang_rt.osx.a -F/Users/bhaller/Qt5.9.8/5.9.8/clang_64/lib
ld: library not found for -l:/usr/lib/libobjc.A.dylib
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[1]: *** [QtSLiM.app/Contents/MacOS/QtSLiM] Error 1
make: *** [sub-QtSLiM-make_first] Error 2
我觉得我一定是个白痴,但我看不到。有帮助吗?
您的 linkage 命令显示您的 linker 是 OS X linker。参考它的manual
关于 -l
选项:
-lx
This option tells the linker to search for libx.dylib or libx.a in the library search path.
If string x is of the form y.o, then that file is searched for in the same places, but
without prepending lib
or appending .a
or .dylib
to the filename.
这会告诉你为什么所有:
-L/usr/lib/ -llibobjc.A.dylib
-L/usr/lib/ -llibobjc.A
-l/usr/lib/libobjc.A.dylib
-l:/usr/lib/libobjc.A.dylib
错了。在你的每一次尝试中,name
是你在 -l
之后输入的任何内容,
linker 将被引导搜索 libname.dylib
或 libname.a
。当然
none 个文件 - 例如liblibobjc.A.dylib.dylib
,liblibobjc.A.dylib.a
- 存在
在 /usr/lib/
或任何其他指定或默认搜索目录中,以及
在第三次和第四次尝试中,libname.(dylib|a)
解析为字符串
甚至不可能是不合格的文件名。
您的最终变体显然想要使用 -l:name
来尝试使 linker
精确搜索 name
( = /usr/lib/libobjc.A.dylib
)。然而,
-l:name
是 GNU Binutils linker 的一个选项,(Linux 中的默认 linker)
并且根据文档,不是 OS X linker 的选项。 (此外,Binutils linker 的那个选项
指示 linker 在每个目录中搜索具有完全不合格名称 name
的文件,/usr/lib/libobjc.A.dylib
不可能)。
要让 link 用户在 /usr/lib/
中找到 libobjc.A.dylib
,您需要以下选项:
-lobjc.A
例如考虑 linkage 命令中的其他 -l
选项:
-lcore -leidos -ltskit -lgsl -leidos_zlib
然而,在你尝试之前,我建议你检查 /usr/lib
是否存在
符号的 link:
libobjc -> libobjc.A
这表明 libobjc.A
是您的工具链 libobjc
的 版本
配置为 select,并且您需要的 linkage 选项很简单:
-lobjc
搜索选项 -L/usr/lib/
在任何情况下都是多余的,因为 /usr/lib/
是默认设置
linker 搜索目录。
我遇到了一个 linker 错误(编译时间,而不是 运行 时间):
ld: library not found for -l:/usr/lib/libobjc.A.dylib
这只是最新版本的错误。我正在尝试 link 反对 /usr/lib/libobjc.A.dylib
,我想对路径进行硬编码;该库保证存在于我所在平台上的这条路径上。确实如此:
bhaller@lanois % ls -l /usr/lib/libobjc.A.dylib
-rwxr-xr-x 1 root wheel 859536 Jan 23 08:59 /usr/lib/libobjc.A.dylib
我试过:
-L/usr/lib/ -llibobjc.A.dylib
-L/usr/lib/ -llibobjc.A
-l/usr/lib/libobjc.A.dylib
-l:/usr/lib/libobjc.A.dylib
在每种情况下,我都会遇到相同的错误,即 ld 找不到库。但它就在那里,我给出了它的完整路径!我错过了什么??
这是完整的调用,还有一些其他的问题:
"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld" -demangle -lto_library /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/libLTO.dylib -dynamic -arch x86_64 -headerpad_max_install_names -macosx_version_min 10.10.0 -o QtSLiM.app/Contents/MacOS/QtSLiM -L/Users/bhaller/Desktop/QtSLiM QMAKE/QtSLiM/../core/ -L/Users/bhaller/Desktop/QtSLiM QMAKE/QtSLiM/../eidos/ -L/Users/bhaller/Desktop/QtSLiM QMAKE/QtSLiM/../treerec/tskit/ -L/Users/bhaller/Desktop/QtSLiM QMAKE/QtSLiM/../gsl/ -L/Users/bhaller/Desktop/QtSLiM QMAKE/QtSLiM/../eidos_zlib/ -syslibroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk -rpath @executable_path/Frameworks -rpath /Users/bhaller/Qt5.9.8/5.9.8/clang_64/lib main.o QtSLiMWindow.o QtSLiMAppDelegate.o QtSLiMWindow_glue.o QtSLiMChromosomeWidget.o QtSLiMExtras.o QtSLiMPopulationTable.o QtSLiMIndividualsWidget.o QtSLiMEidosPrettyprinter.o QtSLiMAbout.o QtSLiMPreferences.o QtSLiMSyntaxHighlighting.o QtSLiMFindRecipe.o QtSLiMHelpWindow.o QtSLiMScriptTextEdit.o QtSLiMEidosConsole.o QtSLiMEidosConsole_glue.o QtSLiMConsoleTextEdit.o QtSLiM_SLiMgui.o QtSLiMTablesDrawer.o QtSLiMFindPanel.o QtSLiMGraphView.o QtSLiMGraphView_FixationTimeHistogram.o QtSLiMGraphView_FrequencySpectra.o QtSLiMGraphView_LossTimeHistogram.o QtSLiMGraphView_PopulationVisualization.o QtSLiMGraphView_FitnessOverTime.o QtSLiMGraphView_FrequencyTrajectory.o QtSLiMHaplotypeManager.o QtSLiMHaplotypeOptions.o QtSLiMHaplotypeProgress.o QtSLiMVariableBrowser.o qrc_buttons.o qrc_icons.o qrc_recipes.o qrc_help.o moc_QtSLiMWindow.o moc_QtSLiMAppDelegate.o moc_QtSLiMChromosomeWidget.o moc_QtSLiMExtras.o moc_QtSLiMPopulationTable.o moc_QtSLiMIndividualsWidget.o moc_QtSLiMAbout.o moc_QtSLiMPreferences.o moc_QtSLiMSyntaxHighlighting.o moc_QtSLiMFindRecipe.o moc_QtSLiMHelpWindow.o moc_QtSLiMScriptTextEdit.o moc_QtSLiMEidosConsole.o moc_QtSLiMConsoleTextEdit.o moc_QtSLiMTablesDrawer.o moc_QtSLiMFindPanel.o moc_QtSLiMGraphView.o moc_QtSLiMGraphView_FixationTimeHistogram.o moc_QtSLiMGraphView_FrequencySpectra.o moc_QtSLiMGraphView_LossTimeHistogram.o moc_QtSLiMGraphView_PopulationVisualization.o moc_QtSLiMGraphView_FitnessOverTime.o moc_QtSLiMGraphView_FrequencyTrajectory.o moc_QtSLiMHaplotypeManager.o moc_QtSLiMHaplotypeOptions.o moc_QtSLiMHaplotypeProgress.o moc_QtSLiMVariableBrowser.o -lcore -leidos -ltskit -lgsl -leidos_zlib -l:/usr/lib/libobjc.A.dylib -framework QtOpenGL -framework QtWidgets -framework QtGui -framework QtCore -framework DiskArbitration -framework IOKit -framework OpenGL -framework AGL -lc++ -lSystem /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/11.0.0/lib/darwin/libclang_rt.osx.a -F/Users/bhaller/Qt5.9.8/5.9.8/clang_64/lib
ld: library not found for -l:/usr/lib/libobjc.A.dylib
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[1]: *** [QtSLiM.app/Contents/MacOS/QtSLiM] Error 1
make: *** [sub-QtSLiM-make_first] Error 2
我觉得我一定是个白痴,但我看不到。有帮助吗?
您的 linkage 命令显示您的 linker 是 OS X linker。参考它的manual
关于 -l
选项:
-lx
This option tells the linker to search for libx.dylib or libx.a in the library search path. If string x is of the form y.o, then that file is searched for in the same places, but without prepending
lib
or appending.a
or.dylib
to the filename.
这会告诉你为什么所有:
-L/usr/lib/ -llibobjc.A.dylib
-L/usr/lib/ -llibobjc.A
-l/usr/lib/libobjc.A.dylib
-l:/usr/lib/libobjc.A.dylib
错了。在你的每一次尝试中,name
是你在 -l
之后输入的任何内容,
linker 将被引导搜索 libname.dylib
或 libname.a
。当然
none 个文件 - 例如liblibobjc.A.dylib.dylib
,liblibobjc.A.dylib.a
- 存在
在 /usr/lib/
或任何其他指定或默认搜索目录中,以及
在第三次和第四次尝试中,libname.(dylib|a)
解析为字符串
甚至不可能是不合格的文件名。
您的最终变体显然想要使用 -l:name
来尝试使 linker
精确搜索 name
( = /usr/lib/libobjc.A.dylib
)。然而,
-l:name
是 GNU Binutils linker 的一个选项,(Linux 中的默认 linker)
并且根据文档,不是 OS X linker 的选项。 (此外,Binutils linker 的那个选项
指示 linker 在每个目录中搜索具有完全不合格名称 name
的文件,/usr/lib/libobjc.A.dylib
不可能)。
要让 link 用户在 /usr/lib/
中找到 libobjc.A.dylib
,您需要以下选项:
-lobjc.A
例如考虑 linkage 命令中的其他 -l
选项:
-lcore -leidos -ltskit -lgsl -leidos_zlib
然而,在你尝试之前,我建议你检查 /usr/lib
是否存在
符号的 link:
libobjc -> libobjc.A
这表明 libobjc.A
是您的工具链 libobjc
的 版本
配置为 select,并且您需要的 linkage 选项很简单:
-lobjc
搜索选项 -L/usr/lib/
在任何情况下都是多余的,因为 /usr/lib/
是默认设置
linker 搜索目录。