dyld:未找到符号:_ERR_remove_thread_state
Posted
技术标签:
【中文标题】dyld:未找到符号:_ERR_remove_thread_state【英文标题】:dyld: Symbol not found: _ERR_remove_thread_state 【发布时间】:2017-04-01 10:55:23 【问题描述】:我正在尝试运行通过 here 提供的 make_torrent 示例代码。
我已经根据here 上写的内容编译并安装了 libtorrent
这里我是如何编译和链接 make_torrent.cc 文件的。
g++ -g -Wall make_torrent.cc -ltorrent-rasterbar -lboost_system -o make_torrent
在运行 make_torrent 示例代码时,我看到了这个
usage: make_torrent FILE [OPTIONS]
Generates a torrent file from the specified file
or directory and writes it to standard out
OPTIONS:
-m file generate a merkle hash tree torrent.
merkle torrents require client support
the resulting full merkle tree is written to
the specified file
-w url adds a web seed to the torrent with
the specified url
-t url adds the specified tracker to the
torrent. For multiple trackers, specify more
-t options
-c comment sets the comment to the specified string
-C creator sets the created-by field to the specified string
-p bytes enables padding files. Files larger
than bytes will be piece-aligned
-s bytes specifies a piece size for the torrent
This has to be a multiple of 16 kiB
-l Don't follow symlinks, instead encode them as
links in the torrent file
-o file specifies the output filename of the torrent file
If this is not specified, the torrent file is
printed to the standard out, except on windows
where the filename defaults to a.torrent
-r file add root certificate to the torrent, to verify
the HTTPS tracker
-S info-hash add a similar torrent by info-hash. The similar
torrent is expected to share some files with this one
-L collection add a collection name to this torrent. Other torrents
in the same collection is expected to share files
with this one.
-M make the torrent compatible with mutable torrents
this means aligning large files and pad them in order
for piece hashes to uniquely indentify a file without
overlap
dyld: lazy symbol binding failed: Symbol not found: _ERR_remove_thread_state
Referenced from: /usr/local/lib/libtorrent-rasterbar.9.dylib
Expected in: flat namespace
dyld: Symbol not found: _ERR_remove_thread_state
Referenced from: /usr/local/lib/libtorrent-rasterbar.9.dylib
Expected in: flat namespace
我知道我必须提供相关参数才能制作 torrent,但我不确定 libtorrent 为何抱怨链接器
g++ --version
Configured with: --prefix=/Library/Developer/CommandLineTools/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 8.0.0 (clang-800.0.42.1)
Target: x86_64-apple-darwin16.4.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin
有什么线索吗?
【问题讨论】:
【参考方案1】:这是由于未正确链接到 openssl 造成的。我假设您使用的是 OSX,它在默认安装路径中有旧版本的 openssl。
我建议使用brew install openssl
安装openssl。请注意,这需要您安装自制软件。
完成此操作后,执行 brew info openssl 并查看告诉您要添加到 LDFLAGS
和 CPPFLAGS
的内容的行。就我而言:
For compilers to find this software you may need to set:
LDFLAGS: -L/usr/local/opt/openssl/lib
CPPFLAGS: -I/usr/local/opt/openssl/include
For pkg-config to find this software you may need to set:
PKG_CONFIG_PATH: /usr/local/opt/openssl/lib/pkgconfig
所以在我的情况下,我会编译:
g++ -g -Wall -L/usr/local/opt/openssl/lib -I/usr/local/opt/openssl/include make_torrent.cc -ltorrent-rasterbar -lboost_system -o make_torrent
如果这不起作用,我也会确保在编译 libtorrent 时包含这些标志。
【讨论】:
以上是关于dyld:未找到符号:_ERR_remove_thread_state的主要内容,如果未能解决你的问题,请参考以下文章
找不到dyld符号? _UIAccessibilityNotificationVoiceOverIdentifier
dyld:惰性符号绑定失败:找不到符号:___emutls_get_address
dyld:惰性符号绑定失败:找不到符号:_objc_loadWeak