Mac OS X编译Aruco报错:x86_64架构存在未定义符号
编译Aruco示例代码(Mac OS X环境)
我帮你梳理好环境配置、补全代码并给出编译方案,方便你快速测试:
你的环境信息
- 操作系统:Mac OS X 10.13.2
- 编译器:clang 900.0.39.2
- 依赖库:
- OpenCV 3.4.1_2(通过Homebrew安装)
- Aruco 3.0.4(通过Homebrew安装)
完整可编译的示例代码
我把你提供的不完整代码补全,添加了错误处理和结果输出逻辑:
#include <iostream> #include <aruco/aruco.h> #include <opencv2/highgui.hpp> int main(int argc,char **argv) { try { if (argc!=2) throw std::runtime_error("Usage: ./detector <input_image_path>"); aruco::MarkerDetector MDetector; // 读取输入图像 cv::Mat InImage=cv::imread(argv[1]); if (InImage.empty()) throw std::runtime_error("Failed to load input image"); // 检测Aruco标记 std::vector<aruco::Marker> Markers; MDetector.detect(InImage,Markers); // 输出检测结果并绘制标记 std::cout << "Detected " << Markers.size() << " markers:" << std::endl; for (auto &marker : Markers) { std::cout << marker << std::endl; marker.draw(InImage, cv::Scalar(0, 0, 255), 2); } // 显示结果窗口 cv::imshow("Aruco Marker Detection", InImage); cv::waitKey(0); } catch (std::exception &ex) { std::cerr << "Error: " << ex.what() << std::endl; return 1; } return 0; }
编译命令推荐
方式1:用pkg-config自动配置(推荐)
Homebrew安装的库通常会生成pkg-config配置文件,直接用以下命令编译:
clang++ -std=c++11 your_code.cpp -o aruco_detector `pkg-config opencv aruco --cflags --libs`
方式2:手动指定路径(如果pkg-config识别失败)
如果pkg-config找不到Aruco的配置,可通过brew info aruco和brew info opencv确认安装路径,然后手动指定:
clang++ -std=c++11 your_code.cpp -o aruco_detector \ -I/usr/local/opt/opencv/include \ -I/usr/local/opt/aruco/include \ -L/usr/local/opt/opencv/lib \ -L/usr/local/opt/aruco/lib \ -lopencv_core -lopencv_highgui -lopencv_imgcodecs -laruco
常见问题排查
- 头文件找不到:检查
/usr/local/opt/aruco/include/aruco/下是否存在aruco.h,用brew info aruco可查看准确安装路径 - 链接错误:确保链接了
opencv_imgcodecs库(imread依赖它),漏掉会导致图像读取失败 - C++版本报错:必须指定
-std=c++11或更高版本,Aruco和OpenCV 3.x依赖C++11特性
内容的提问来源于stack exchange,提问作者kungphil
相关产品推荐
相关产品推荐

