2011-07-10 163 views
1

編譯時出現 問題 用g ++連接程序和多個文件(我通常使用vstudio,但是...)。g ++編譯多個文件

  1. 如果我只用main.cpp中(幷包含相應的頭文件OpenCV的),一切都確定了

    g++ main.cpp -o main -I"C:\OpenCV2.1\include\opencv" -L"C:\OpenCV2.1\lib" 
    -lcxcore210 -lcv210 -lhighgui210 
    
  2. 如果我的main.cpp和一些otherfile.cpp(兩者都需要OpenCV的),並使用

    g++ main.cpp otherfile.cpp -o main -I"C:\OpenCV2.1\include\opencv" 
    -L"C:\OpenCV2.1\lib" -lcxcore210 -lcv210 -lhighgui210 
    

    它根本不起作用,我得到了

    c:/mingw/bin/../lib/gcc/mingw32/4.5.0/../../../../mingw32/bin/ld.exe: warning: a 
    uto-importing has been activated without --enable-auto-import specified on the c 
    ommand line. 
    This should work unless it involves constant data structures referencing symbols 
    from auto-imported DLLs. 
    C:\Users\ONDEJM~1\AppData\Local\Temp\ccNisCoC.o:main.cpp:(.text+0x16d0): undefin 
    ed reference to `cv::Mat::Mat(_IplImage const*, bool)' 
    C:\Users\ONDEJM~1\AppData\Local\Temp\ccNisCoC.o:main.cpp:(.text+0x16f1): undefin 
    ed reference to `cv::FAST(cv::Mat const&, std::vector<cv::KeyPoint, std::allocat 
    or<cv::KeyPoint> >&, int, bool)' 
    C:\Users\ONDEJM~1\AppData\Local\Temp\ccNisCoC.o:main.cpp:(.text$_ZN2cv3Mat7relea 
    seEv[cv::Mat::release()]+0x3f): undefined reference to `cv::fastFree(void*)' 
    collect2: ld returned 1 exit status 
    

我在做什麼錯?

+2

這是一個鏈接問題,而不是編譯問題。你有沒有嘗試單獨編譯main.cpp和otherfile.cpp,然後將生成的.o文件鏈接在一起?這是否會影響錯誤? – Dan

+0

是的,我試過了。單獨編譯這兩個文件不是問題,但是,將它們一起構建會返回相同的錯誤 – morph

+0

請參閱相關的http://stackoverflow.com/questions/1095298/gcc-c-linker-errors-undefined-reference-to-vtable -for-xxx-undefined -referen/1095321#1095321對此更多信息 – jonsca

回答

0

嗯,看起來我犯了一個愚蠢的錯誤......解決方案很簡單:只需用g ++重新編譯所有openCV binarries,一切都會好的!

0

將「-Wl, - enable-auto-import」傳遞給g ++。閱讀ld關於這個的文檔。

+0

好,警告已離開,但未定義引用的問題不是...... – morph