【问题标题】:g++ ld: symbol(s) not found for architecture x86_64g++ ld:未找到架构 x86_64 的符号
【发布时间】:2013-11-18 05:15:17
【问题描述】:

我正在尝试编译 Sam Hare 的 Struck code

我正在使用 mac OSX10.9、opencv 2.4.6 和 Eigen 2.0.17。

Eigen 和 opencv 标头存储在 /opt/local/include 中,而 opencv dylib 存储在 /opt/local/lib 中。

我修改了 Hare 的 Makefile 来处理这个文件夹。当我在终端上输入 make 时:

g++ -L/opt/local/lib -lopencv_core -lopencv_highgui -lopencv_imgproc src/Config.o src/Features.o src/HaarFeature.o src/HaarFeatures.o src/HistogramFeatures.o src/ImageRep.o src/LaRank.o src/MultiFeatures.o src/RawFeatures.o src/Sampler.o src/Tracker.o src/main.o src/GraphUtils/GraphUtils.o -o struck

我收到以下错误:

Undefined symbols for architecture x86_64:  
"cv::namedWindow(std::__1::basic_string<char,
std::__1::char_traits<char>, std::__1::allocator<char> > const&,
int)", referenced from:
      _main in main.o   "cv::split(cv::Mat const&, std::__1::vector<cv::Mat, std::__1::allocator<cv::Mat> >&)",
referenced from:
      ImageRep::ImageRep(cv::Mat const&, bool, bool, bool) in ImageRep.o   "cv::imread(std::__1::basic_string<char,
std::__1::char_traits<char>, std::__1::allocator<char> > const&,
int)", referenced from:
      _main in main.o   "cv::imshow(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&,
cv::_InputArray const&)", referenced from:
      LaRank::Debug() in LaRank.o
      Tracker::Debug() in Tracker.o
      _main in main.o ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see
invocation)

有什么想法吗?谢谢!

【问题讨论】:

  • 您在 32 位和 64 位库之间存在冲突。
  • 好吧,其实我也不知道怎么解决。有什么提示吗?
  • 您需要检查所有链接在一起的库,无论它们是 32 位还是 64 位。如果您不确定从哪里获得它们,我不知道该怎么做。

标签: c++ opencv gcc


【解决方案1】:

当我只是尝试从两个不同的目标文件(main.o 和 add.o)创建可执行文件时,我遇到了类似的警告/错误/失败。我正在使用命令:

gcc -o exec main.o add.o

但我的程序是 C++ 程序。使用g++ 编译器解决了我的问题:

g++ -o exec main.o add.o

我一直认为gcc 可以自己解决这些问题。显然不是。我希望这可以帮助其他人搜索此错误。

【讨论】:

  • 我也是这么假设的:“我一直认为 gcc 可以自己解决这些问题。”
【解决方案2】:

终于解决了我的问题。

我在 XCode 中使用源代码创建了一个新项目,并将 C++ 标准库从默认的 libc++ 更改为 libstdc++,如 thisthis

【讨论】:

  • 在我的情况下,将“libc++.dylib”添加到框架解决了这个问题。希望这可以帮助某人
【解决方案3】:

我在 .h 文件中写下了我的声明

class String
{
    String (const char * cstr = 0);
}; 

我在另一个 .cpp 文件中使用内联(实现)

inline String::String(const char * cstr)
{
//code ... 
}

然后我使用 g++ 并得到这个: 架构 x86_64 的未定义符号: “String::String(char const*)”,引用自: _main 在 test-d389f3.o ld:未找到架构 x86_64 的符号

解决方案:当声明和实现独立时,不要写inline

【讨论】:

    【解决方案4】:

    当我使用clang 编译 C++ 程序时,我遇到了类似的错误。

    但是在我改用chang++后,编译成功了。

    【讨论】:

    猜你喜欢
    • 2011-10-16
    • 1970-01-01
    • 2020-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-09
    • 2018-02-20
    • 1970-01-01
    相关资源
    最近更新 更多