0
我遇到了一個問題,將我的共享庫鏈接到OpenDDS(v3.9)靜態庫,因爲我無法找到此方法簽名所在的位置。OpenDDS中的哪個庫包含「OpenDDS :: DCPS :: operator <<」?
這是錯誤。
[exec] libs/mylib/ABTypeSupportImpl.cpp:74: error: undefined reference to 'OpenDDS::DCPS::operator<<(OpenDDS::DCPS::Serializer&, short)'
[exec] collect2: error: ld returned 1 exit status
[exec] make: *** [/tmp/mybuild/lib_ab/obj/local/armeabi-v7a/lib_ab.so] Error 1
通過編譯IDL自動生成ABTypeSupportImpl.cpp。接下來會出現更多相同的錯誤。由於名稱空間(OpenDDS :: DCPS),我認爲這可以在庫libOpenDDS_Dcps.a中找到,但是在此lib上使用nm,然後grep'ing爲「運算符」或「<」,不會產生任何結果。難道這個名字對於重載操作符來說有點陌生嗎?我在$ DDS_ROOT/lib中的每個庫文件上運行這個函數,但什麼也沒找到。
如果我重新編譯IDL並刪除數據類型如短或長的結構的成員字段,那麼沒有錯誤,並且一切都很好。
任何人都知道此方法簽名可能位於哪個庫?
告訴我的程序是否內聯,我認爲是一種內部優化,編譯器可以選擇或不選擇這樣做。至少這是我的理解。我沒有特別禁用我編譯中的任何東西。我一直在嘗試各種標誌。 – Ender
此外,我試過GCC優化選項與01和更高,這似乎做了很多內聯函數,但仍然沒有去。 – Ender
在OpenDDS(和ACE)中有一個用於啓用或禁用內聯方法的定義,它是代碼級使用內聯或不內聯的功能。嘗試將__ACE_INLINE__或ACE_NO_INLINE添加到編譯器定義的編譯代碼時,請檢查OpenDDS編譯在編譯OpenDDS時使用哪一個 –