gcc g++ ld:未找到体系结构x86_64的符号

8mmmxcuj  于 2022-11-13  发布在  其他
关注(0)|答案(5)|浏览(281)

我正在编译山姆兔的Struck code
我用的是Mac OS X 10.9,开放式系统2.4.6和Eigen 2.0.17。
特征标头和opencv标头存储在/opt/local/include中,而opencv动态库存储在/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)

有什么主意吗?谢谢!

7cwmlq89

7cwmlq891#

当我尝试从两个不同的目标文件(main.o和add.o)创建一个可执行文件时,我遇到了类似的警告/错误/失败。
gcc -o exec main.o add.o
但是我的程序是一个C++程序,使用g++编译器解决了我的问题:
g++ -o exec main.o add.o
我一直有这样的印象,gcc可以自己弄清楚这些事情。显然不是。我希望这能帮助其他人搜索这个错误。

vfhzx4xs

vfhzx4xs2#

终于解决了我的问题。
我在XCode中创建了一个包含源代码的新项目,并将C标准库从默认的libc更改为libstdc++,如thisthis中所示。

kninwzqo

kninwzqo3#

我得到了同样的错误。我不认为这是一个“修复”,但我的解决方案是也包括cpp文件。所以,而不是只是把

#include "MyClass.h"

我得把

#include "MyClass.h"
#include "MyClass.cpp"
mwecs4sa

mwecs4sa4#

我在.h文件中写了声明

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

并且我在另一个.cpp文件中使用了inline(实现)

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

然后我用g++得到这个:x86_64架构的未定义符号:“字符串::字符串(字符常量 *)",引用自:_测试-d389 f3中的主文件。文件名:未找到体系结构x86_64的符号
解决方案:当声明和实现是独立时,不要编写inline

ma8fv8wu

ma8fv8wu5#

当我用clang编译一个C++程序时,我也有类似的错误。
但是在我改用chang++之后,编译工作了。

相关问题