我碰到了链接器错误(编译时,而不是运行时):
ld: library not found for -l:/usr/lib/libobjc.A.dylib这只是这个错误的最新版本。我试图链接到/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我觉得我一定是个白痴,但我看不见。帮助?
发布于 2020-05-07 09:06:46
您的链接命令显示您的链接器是OS链接器。有关-l选项,请参阅它的-l:
-lx 此选项告诉链接器在库搜索路径中搜索libx.dylib或libx.a。如果字符串x的形式为y.o,则会在相同的位置搜索该文件,但不需要在文件名前加上
lib或附加.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都错了。在您的每一次尝试中,name都是您在-l之后键入的任何内容,链接器将被导向搜索libname.dylib或libname.a。当然,这些文件--例如liblibobjc.A.dylib.dylib、liblibobjc.A.dylib.a --都不存在于/usr/lib/或任何其他指定或默认的搜索目录中,在第三次和第四次尝试中,libname.(dylib|a)解析为甚至不可能是不限定文件名的字符串。
您的最后一个版本显然希望使用-l:name,以便使链接器能够精确地搜索name (= /usr/lib/libobjc.A.dylib)。但是,-l:name是GNU Binutils链接器的一个选项(Linux中的默认链接器),而且根据文档,OS链接器不是一个选项。(此外,Binutils链接器的选项指示链接器在每个目录中搜索一个文件,该文件的名称为name,而/usr/lib/libobjc.A.dylib不能这样做)。
要让链接器在libobjc.A.dylib中定位/usr/lib/,需要以下选项:
-lobjc.A例如,请考虑链接命令中的其他-l选项:
-lcore -leidos -ltskit -lgsl -leidos_zlib不过,在尝试之前,我建议您在/usr/lib中签入是否存在符号链接:
libobjc -> libobjc.A这表明libobjc.A是工具链配置为选择的libobjc的版本,所需的链接选项是:
-lobjc搜索选项-L/usr/lib/无论如何都是多余的,因为/usr/lib/是默认的链接器搜索目录。
https://stackoverflow.com/questions/61649602
复制相似问题