遇到一个bug, 看起来像是g++-4.6的问题。
问题是这样的。这个源文件用到了OpenCV:
//< file: test.cpp
#include
int main (int argc, char** argv) {
cv::Mat image;
return 0;
}
用这样一行命令编译:
g++-4.6 `pkg-config --libs opencv` -o test.bin test.cpp
遇到了错误:
/tmp/ccs2MlQz.o: In function `cv::Mat::~Mat()':
test.cpp:(.text._ZN2cv3MatD2Ev[_ZN2cv3MatD5Ev]+0x39): undefined reference to `cv::fastFree(void*)'
/tmp/ccs2MlQz.o: In function `cv::Mat::release()':
test.cpp:(.text._ZN2cv3Mat7releaseEv[cv::Mat::release()]+0x47): undefined reference to `cv::Mat::deallocate()'
collect2: ld returned 1 exit status
错误的原因应该是g++没有正确的链接到OpenCV的库。各种尝试之后发现只要调换一下参数的位置就可以正常编译 -_-!!
改用这样一行命令编译就没有问题了。
g++-4.6 test.cpp `pkg-config --libs opencv` -o test.bin
具体原因不明,但是如果把g++-4.6换作g++-4.4就没有这个问题。
这行命令也可以正常编译:
g++-4.4 `pkg-config --libs opencv` -o test.bin test.cpp
这么看起来很有可能是g++-4.6的bug,或者是改进..?
不是bug。把动态库放在最后。官方文档上有涉及。
lib確實應該放末尾的,比如鏈接m這個數學庫,就必須放末尾的。