Qt slot 鏈結問題

2021-05-02 08:41:55 字數 803 閱讀 1200

1.問題:qglviewer中的函式不能正常link.

解決: 翻看其源**,發現是因為從原始碼安裝libqglviewer時,編譯用了qt 3,而我的程式中用qt4 編譯.所以必須重新用qt4編譯.

但是,更改qtdir 環境變數為qt4後,重新編譯的話,qmake生成makefile時就提示出錯.進一步發現,是因為雖然設了qtdir為qt4,標頭檔案和庫檔案都會使用qt4,但是moc,uic等都是用的qt3版的,再把path環境變數改動後,一切ok.

解決:嘗試(1):把所有的obj檔案和uic檔案刪除,重新編譯.仍然失敗.

去trolltech的mail lists找到原因: 因為qmake生成makefile的時候,這個類的標頭檔案中並沒有q_object,所以在相應的makefile裡面並沒有用moc ***.h命令,最終導致鏈結失敗.重新執行qmake,問題解決.

在查詢解決方法的時候,附帶發現一點:

qmake不會處理.cpp檔案裡的q_object,所以,如果在.cpp檔案中有它的話,也會產生undefined reference to vtable for "***::***". 這時,需要先用moc ***x.cpp生成相應的moc檔案,再包含到.cpp裡面去,才能解決這個問題.

3. 看qt的reference發現: 可以connect(pobja, signal(somesignala()),pobjb,signal(somesignalb()));這樣pobja發出的somesingala會導致pobjb發出somesignalb,從而形成訊號接力.

編譯鏈結問題

編譯 1 檢查標頭檔案有相應的函式和變數宣告 2 原始檔語法問題。只與目標檔案相關,即 o window下目標檔案可打包為lib,而linux下是打包為靜態庫 a 或者動態庫 so vs工程下,如果某些 cpp需要編譯成 obj,則必須在介面上新增到工程中的源資料夾中,這樣才能生成目標檔案.obj,...

exosip鏈結問題

exosip.lib exosip.obj error lnk2019 無法解析的外部符號 osip transaction set reserved1,該符號在函式 exosip transaction init 中被引用 1 exosip.lib exosip.obj error lnk2019...

oracle鏈結問題

1 ora 12514 tns 監聽程式當前無法識別連線描述符中請求的服務解決 參考 解決,主要配置 sid desc global dbname orcl oracle home h oracle product 11.2.0 dbhome 1 sid name orcl 使用預設的。2 orac...