我正在尝试编译Sam Hare的Struck代码.
我使用的是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
Run Code Online (Sandbox Code Playgroud)
我收到这些错误:
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&, …Run Code Online (Sandbox Code Playgroud) 升级到Mac OS X 10.9/Xcode 5.0.1后,创建共享库(.dylib)的命令行失败,出现了几个未定义的符号.
clang++ -dynamiclib -install_name test.dylib *.o -o test.dylib
Undefined symbols for architecture x86_64:
"std::allocator<char>::allocator()", referenced from:
_main in test.o
"std::allocator<char>::~allocator()", referenced from:
_main in test.o
"std::ostream::operator<<(std::ostream& (*)(std::ostream&))", referenced from:
_main in test.o
"std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char const*, std::allocator<char> const&)", referenced from:
_main in test.o
"std::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()", referenced from:
_main in test.o
"std::ios_base::Init::Init()", referenced from:
___cxx_global_var_init in test.o
"std::ios_base::Init::~Init()", referenced from:
___cxx_global_var_init in test.o
"std::cout", referenced from:
_main in test.o
"std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> …Run Code Online (Sandbox Code Playgroud) 好吧,所以我正在使用Ocamlyacc制作词法分析器和解析器.我已经完成了我的研究,我认为这与我的makefile有关,而不是为我的编译器选择正确的位版本或类似的东西?我不太了解makefile,这就是我要问的原因.
我在另一台计算机上运行我的程序,它可以毫无问题地工作,所以它必须与我的机器有关.
它是MacBook Pro 64位.我正在使用Xcode 4.2.1.
这是makefile:
SHELL = /bin/sh
C_C = gcc
CPP_C = g++
ifdef GPROF
C_CPP_FLAGS = -pg -O3
else
ifndef DEBUG
C_CPP_FLAGS = -O3
else
C_CPP_FLAGS = -g
endif
endif
C_LD = $(C_C)
CPP_LD = $(CPP_C)
C_YACC = bison
C_LEX = flex
AR = ar
RANLIB = ranlib
OCAML_C = ocamlc
OCAML_OPT_C = ocamlopt
ifdef GPROF
OCAML_C_FLAGS = -dtypes
OCAML_OPT_C_FLAGS = -dtypes
OCAML_LD = $(OCAML_C) -g
OCAML_OPT_LD = $(OCAML_OPT_C) -p
else
ifndef DEBUG
OCAML_C_FLAGS = -dtypes …Run Code Online (Sandbox Code Playgroud) 首先,我已经在Stackoverflow上阅读了有关此问题的相关内容,但我仍然无法解决它.我尽可能简化了我的代码.
我只有一个带.h和.cpp文件的自定义类,但是在尝试从main.cpp创建此类的实例时出错.
main.cpp中
#include "Customer.h"
using namespace std;
int main() {
Customer a("string");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
Customer.h
using namespace std;
class Customer {
public:
Customer(string input);
};
Run Code Online (Sandbox Code Playgroud)
为customer.cpp
#include "Customer.h"
using namespace std;
Customer::Customer(string input) {
}
Run Code Online (Sandbox Code Playgroud)
我得到的错误信息如下?
gcc *.cpp -o k
Undefined symbols for architecture x86_64:
"std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::__init(char const*, unsigned long)", referenced from:
_main in main-40340f.o
"std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::basic_string(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)", referenced from:
_main in main-40340f.o
"std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::~basic_string()", referenced from:
_main in …Run Code Online (Sandbox Code Playgroud)