【发布时间】:2017-10-03 00:44:25
【问题描述】:
我正在编译一些源代码,这些源代码需要我已经构建的其他项目中的一些 dylib。我来了
ld:未找到架构 x86_64 的符号
每当我执行时
g++ some_code.cpp -I/usr/local/include -o executable_binary
我知道 g++ 无法找到已编译的 dylib(安装在 /usr/local/include),因为该错误还提到了许多属于 dylib 的特定符号。
我已经试过了:
- 正在执行
install_name_tool -id "@/usr/local/lib/requiredlib.dylib" /usr/local/lib/requiredlib.dylib - 将
-L/usr/local/lib添加到编译选项中。 - 将所有 dylib 路径显式添加到编译选项中。
- 尝试添加
DYLD_LIBRARY_PATH失败,因为 Sierra 出于安全原因不允许设置该变量。
我知道可以添加DYLD_LIBRARY_PATH,但这需要禁用 SIP。如果有更清洁的方法可以做到这一点,我可以做到。
P.S.:我正在尝试为Tulip graph library 编译教程示例。
缺少的符号与我安装的图形库有关。错误信息是:
Undefined symbols for architecture x86_64:
"tlp::saveGraph(tlp::Graph*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, tlp::PluginProgress*)", referenced from:
_main in tutorial001-02ee7e.o
"operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, tlp::Graph const*)", referenced from:
_main in tutorial001-02ee7e.o
ld: symbol(s) not found for architecture x86_64
每当我做ls /usr/local/lib/requiredlib.dylib 时,Tulip 编译的所有库都在那里。
g++ -v 产生:
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 8.1.0 (clang-802.0.42)
Target: x86_64-apple-darwin16.5.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
在完成ls /usr/local/include/tulip/ 之后,我得到了我打算使用的库的*.h 文件列表。
【问题讨论】:
-
目前还不清楚您缺少哪些符号,您正在运行什么 g++ 变体等。而且您的编译库肯定没有安装在
/usr/local/include -
编辑您的问题以添加这些详细信息。
-
要获得有关失败链接的帮助,您至少需要发布失败的链接命令行及其输出,逐字。关于你所做工作的粗略报告太模糊了,我们无法猜测。
标签: g++ macos-sierra dylib