Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ “铿锵链接器报告”;找不到符号“;,尽管';nm-m';显示该名称存在于链接到的库中_C++_Boost_Linker_Clang - Fatal编程技术网

C++ “铿锵链接器报告”;找不到符号“;,尽管';nm-m';显示该名称存在于链接到的库中

C++ “铿锵链接器报告”;找不到符号“;,尽管';nm-m';显示该名称存在于链接到的库中,c++,boost,linker,clang,C++,Boost,Linker,Clang,在OSX(clang)上,在链接阶段,在我的代码中找不到符号(boost::filesystem::portable\u posix\u name)。下面是一个简短的代码段,其中包含我在代码中调用的函数: if (boost::filesystem::is_directory(settings.parent_path()) && boost::filesystem::portable_posix_name(settings.filename().string())) { ...

在OSX(clang)上,在链接阶段,在我的代码中找不到符号(
boost::filesystem::portable\u posix\u name
)。下面是一个简短的代码段,其中包含我在代码中调用的函数:

if (boost::filesystem::is_directory(settings.parent_path())
 && boost::filesystem::portable_posix_name(settings.filename().string()))
{ ... }
(如果我的代码段中需要更多上下文,请告诉我。)

程序编译和链接时使用的链接器命令行包含以下内容:

-L/Users/administrator/boost\u 1\u 54\u 0/lib-lboost\u文件系统

。。。并且所指示的路径和文件名(libboost_filesystem.a和
libboost_filesystem.dylib
)都存在于所指示的路径中

链接器找不到Boost函数
Boost::filesystem::portable\u posix\u name(std::string const&)

架构x86_64的未定义符号: “boost::filesystem::portable_posix_name(std::_1::basic_string const&)”

但是,我确实看到该函数存在于相关的
.a
.dylib
文件中:

nm-m./libboost\u filesystem.a
显示
00000000000090f0(\uuuuu TEXT,\uuuuuuuuu TEXT)外部的\uuuuuuuznoost10filesystem19portable\u posix\u nameERKSs
,并通过显示运行被破坏的函数名
\uuuuuuuzn5boost10filesystem19portable\u posix\u nameERKSs

\u boost::filesystem::portable\u posix\u name(std::string const&)

。。。我相信名称前面的下划线是正确的,因为找到的其他函数也有前面的下划线

.dylib
文件也包含相同的损坏字符串)

我已经确认
.a
.dylib
文件的体系结构都是正确的:
otool-hv./libboost\u文件系统。a
通过和(对于
.dylib
)显示“
x86\u 64

为了确保库确实被找到并链接,我在compile命令行中更改了库的名称,如下所示:

-L/Users/administrator/boost\u 1\u 54\u 0/lib-lboost\u filesystemm

(注意文件名末尾的双精度
mm
),只需确认返回了一个“library not found”(未找到库)错误,它是:
ld:library not found for-lboost\u filesystemm
。我还确认,
libboost_filesystem.a
.dylib
文件系统中唯一出现的文件是给定Boost目录树中的文件(一个在
/lib
目录中,另一个在
/bin.v2
子目录中具有相同大小和几乎相同的创建日期/时间);另外,更改
-L/Users/administrator/boost\u 1\u 54\u 0/lib
行使其成为垃圾会导致出现
ld:library not found for-lboost\u filesystem
错误

奇怪的是,当我grep
nm-m
输出以显示
boost::filesystem::is_directory
时,对于后一个函数,在库的符号表中没有显示任何结果,即使该函数没有链接器错误。在我看来,这似乎是非常倒退的(库中没有出现的函数链接很好,但是库中出现的函数给出了一个链接器错误?)-但这个问题是另一天的问题(而且,可能这个函数实际上会有一个未定义的符号错误,但是由于第一个未定义的符号错误,它没有显示出来)

我的问题是:为什么没有找到此符号,尽管链接了具有正确体系结构的正确库和正确的
外部
符号


为了响应@Sebastian的回答,我在这里粘贴链接器的完整命令行。这个命令行是由Qt创建的(这是一个Qt项目)

请注意,
-lboost\u filesystem
参数出现在列出所有对象文件之后

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -headerpad_max_install_names-Wl,-syslibroot,/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk -stdlib=libc++-mmacosx version min=10.7-o NewGene.app/Contents/MacOS/NewGene main.o newgenemainwindow.o newgenecreateoutput.o newgeneselectvariables.o newgenevariablesummary.o newgenetabwidget.o newgenevariablegroup.o o newgenevariablegroupsscrollarea.o newgenevariablestoolbox.o newgenevariablestoolbox.o newgenevariablesummaryscrollarea.o newgenevariablesummarygroup.o kadcolumnselectionbox.o timerangebox.o newgenewidget.o uisettingsmanager.o uimodelmanager.o uidocumentmanager.o uistatusmanager.o globals.o uimanager.o settingchangeresponseindicator.o settingchangerequestindicator.o 设置ChangeIndicator.o项目设置ChangeIndicator.o 全局设置ChangeIndicator.o设置ChangeResponseItem.o settingchangerequestitem.o settingchangeitem.o 项目设置ChangeItem.o全局设置ChangeItem.o globalsettingchangerequestindicator.o globalsettingchangeresponseindicator.o globalsettingchangerequestitem.o globalsettingchangeresponseitem.o 项目设置ChangeRequestIndicator.o 项目设置ChangeResponseIndicator.o 项目设置更改请求项.o项目设置更改响应项.o modelchangeresponse.o modelchangerequest.o modelchangeindicator.o modelchangeresponseitem.o modelchangerequestitem.o modelchangeitem.o uiprojectmanager.o newgenefilenames.o uiloggingmanager.o o uiallsettings.o uisetting.o uimessager.o uiinputproject.o uioutputproject.o uiinputmodel.o uioutputmodel.o uiallprojectsettings.o uimodel.o uiproject.o uiinputprojectsettings.o uioutputprojectsettings.o uiallglobalsettings.o uiallglobalsettings_list.o uiinputprojectsettings_list.o 用户界面