ndk 編譯的一些隨手記

2022-07-27 03:21:10 字數 3557 閱讀 2956

1. 鏈結靜態庫的順序

在鏈結靜態庫時,如果多個靜態庫之間存在依賴關係,則有依賴關係的靜態庫之間存在鏈結順序問題。這在使用靜態庫時需要注意,否則會報符號找不到的鏈結錯誤。

例如:lib2.a 依賴於 lib1.a,而最終可執行檔案 test 依賴於 lib2.a,則鏈結選項應為:

-llib2.a -llib1.a,而不能反過來,否則會報 lib1.a 中的某些符號未定義。

2. 編譯時遇到  undefined references to static stl 的情況  具體log:

undefined reference to `std::__detail::_list_node_base::_m_unhook()'

/home/sonic/workplace/android-ndk-r8b/sources/cxx-stl/gnu-libstdc++/4.6/include/bits/stl_list.h:1532: undefined reference to `std::__detail::_list_node_base::_m_unhook()'

/home/sonic/workplace/android-ndk-r8b/sources/cxx-stl/gnu-libstdc++/4.6/include/bits/stl_list.h:1532: undefined reference to `std::__detail::_list_node_base::_m_unhook()'

/home/sonic/workplace/project/android_webdemo/jni/webdemo/../library/libs/poco/1.5.1/android/libpocoxml.a(abstractnode.o): in function `std::list>::_m_insert(std::_list_iterator, poco::xml::domobject* const&)':

/home/sonic/workplace/android-ndk-r8b/sources/cxx-stl/gnu-libstdc++/4.6/include/bits/stl_list.h:1516: undefined reference to `std::__detail::_list_node_base::_m_hook(std::__detail::_list_node_base*)'

/home/sonic/workplace/project/android_webdemo/jni/webdemo/../library/libs/poco/1.5.1/android/libpocoxml.a(elementsbytagnamelist.o): in function `std::list>::_m_insert(std::_list_iterator, poco::xml::domobject* const&)':

/home/sonic/workplace/android-ndk-r8b/sources/cxx-stl/gnu-libstdc++/4.6/include/bits/stl_list.h:1516: undefined reference to `std::__detail::_list_node_base::_m_hook(std::__detail::_list_node_base*)'

/home/sonic/workplace/android-ndk-r8b/sources/cxx-stl/gnu-libstdc++/4.6/include/bits/stl_list.h:1516: undefined reference to `std::__detail::_list_node_base::_m_hook(std::__detail::_list_node_base*)'

/home/sonic/workplace/project/android_webdemo/jni/webdemo in function `fs::int2string(int)':

fsstring.cpp:(.text+0xfc): undefined reference to `std::allocator::allocator()'

fsstring.cpp:(.text+0x120): undefined reference to `std::allocator::~allocator()'

fsstring.cpp:(.text+0x13c): undefined reference to `std::allocator::~allocator()'

/home/sonic/workplace/project/android_webdemo/jni/webdemo in function `fs::int2wstring(int)':

fsstring.cpp:(.text+0x1a8): undefined reference to `std::allocator::allocator()'

fsstring.cpp:(.text+0x1d0): undefined reference to `std::allocator::~allocator()'

fsstring.cpp:(.text+0x228): undefined reference to `std::allocator::~allocator()'

/home/sonic/workplace/project/android_webdemo/jni/webdemo in function `fs::wstring2string(std::basic_string, std::allocator> const&)':

fsstring.cpp:(.text+0x2f8): undefined reference to `std::allocator::allocator()'

fsstring.cpp:(.text+0x318): undefined reference to `std::allocator::~allocator()'

fsstring.cpp:(.text+0x348): undefined reference to `std::allocator::~allocator()'

/home/sonic/workplace/project/android_webdemo/jni/webdemo in function `fs::string2wstring(std::basic_string, std::allocator>)':

fsstring.cpp:(.text+0x3f8): undefined reference to `std::allocator::allocator()'

fsstring.cpp:(.text+0x418): undefined reference to `std::allocator::~allocator()'

fsstring.cpp:(.text+0x448): undefined reference to `std::allocator::~allocator()'

等等.用的ndk  gnustl_static 。 google 了一下,在  發現了大牛的回答.

1/ don't add -lstdc++

3/ put the source file _before_ the libraries it depends on

關鍵是第三步.  把鏈的庫寫到最後.

然後 感受就和樓主一樣了  thank you, it solved everything! =) .

自己隨手記得Ubuntu的一些命令

1.終端命令列開啟一幅 命令是eog 例如 重啟命令 sudo shutdown r now 3.解壓7z 7z x file file是你要解壓的檔名 tar zxvf 檔名.tar.gz tar jxvf 檔名.tar.bz2 unzip 檔名.zip 4.sudo find home wjx ...

NDK編譯中的一些問題記錄

3.匯出so裡面的函式 當我們編譯出了so後,呼叫這個so時發現有些方法找不到,可以檢視so檔案是否包含這個函式符號,命令如下 dumpobj tt libcocos2d.so grep 4.將符號轉為函式名 找到了函式符號,可以使用如下命令找到對應的函式 c filt 6.取消編譯優化 在將靜態庫...

我的工作隨手記(一)

更新了客戶端之後使用者進入還是老版本的,或者因為快取的部分的js而造成奇怪的問題,雖然cocoscreator可以勾選md5 cache讓生成的東西多乙個md5效驗碼,可是實際使用中還是會碰到快取的問題。這一度讓我很是崩潰。然後各種嘗試之後覺得有可能是html檔案本地快取了,造成我更新上去的js指令...