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指令...