macos - 如何将 macOS 上的 dylib 与 clang(例如 libjpeg)链接?
问题描述
我正在编译一个需要在 macOS 上链接 libjpeg 的程序。
Computer:src user$ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk -Wl,-search_paths_first -Wl,-headerpad_max_install_names CMakeFiles/splat.dir/itwom3.0.c.o CMakeFiles/splat.dir/splat.cpp.o -o splat -lbz2 /opt/local/lib/libpng.dylib /opt/local/lib/libz.dylib /opt/local/lib/libjpeg.dylib
但是,在链接期间,我得到未定义的符号错误:
Undefined symbols for architecture x86_64:
"jpeg_std_error(jpeg_error_mgr*)", referenced from:
ImageWriterInit(ImageWriter_st*, char const*, ImageType, int, int) in splat.cpp.o
该符号确实存在于相关库中:
Computer:src user$ nm -a /opt/local/lib/libjpeg.dylib | grep jpeg_std_error
0000000000017584 T _jpeg_std_error
有什么明显的我做错了吗?
解决方案
错误中的符号名称包含类型信息(参数类型)这一事实表明它是一个损坏的 C++ 符号。libjpeg 不提供该符号,它仅提供 C 符号。换句话说jpeg_std_error(jpeg_error_mgr*)
!= _jpeg_std_error
。
这表明您需要将您#include
的 libjpeg 标头包含在extern "C" { ... }
.
推荐阅读
- javascript - React:为什么要绑定这个方法?
- python - 使用 numpy 计算多条轨迹的成对距离
- python - 有没有办法使用“请求”通过 python 调用 Azure Devops?
- r - 什么是相当于 R smartbind() 的 python/pandas
- groovy - 如何将 Groovy 闭包变量注入 Spock 模拟谓词参数?
- javascript - D3:无法单击 SVG 元素
- python - 如何获得浮士德发送原始回复
- c++ - 未初始化变量的危险是什么?
- reactjs - 我有两个表格,我想用下一个按钮将数据从第一个表格传送到第二个表格
- c# - 为什么我会收到 RemoteCertificateNameMismatch?