本次主要是將C++的靜態(tài)庫鏈接到一個C的靜態(tài)庫里。編譯環(huán)境是 mingw。
一、x86環(huán)境
1、C++的靜態(tài)庫編譯問題。由于用到了 stl 庫,所以遇到了 string 和bits/c++config.h 找不到的錯誤,解決方法是包含目錄里增加這兩個目錄:
D:\MinGW\x86\lib\gcc\mingw32\4.8.1\include\c++\
D:\MinGW\x86\lib\gcc\mingw32\4.8.1\include\c++\mingw32
2、將C++庫鏈接進(jìn)C時的問題。由于需求完全靜態(tài)鏈接,所以要把C++的標(biāo)準(zhǔn)庫也靜態(tài)鏈接進(jìn)來,最開始使用的是-static-libstdc++ ,沒有成功鏈接上,于是選擇在-Wl,--whole-archive 與-Wl,--no-whole-archive 之間加入 mingw 的C++標(biāo)準(zhǔn)庫具體地址,即:
-Wl,--whole-archive?\
D:/MinGW/x86/lib/gcc/mingw32/4.8.1/libstdc++.a ? ?\
-Wl,--no-whole-archive
二、安卓環(huán)境
1、由于用到了 stl 庫,需要在 Android.mk 里增加一行:
APP_STL?:=?stlport_static
2、由于用到了 stl 庫,所以遇到了 string 和bits/c++config.h 找不到的錯誤,解決方法是包含目錄里增加這三個目錄:
$NDK/sources/cxx-stl/gnu-libstdc++/4.6/include
$NDK/sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi-v7a/include
$NDK/sources/cxx-stl/gnu-libstdc++/4.6/lib
其中NDK=D:/Tools/SDK/android-ndk-r9d 。
3、std::string 找不到和error:?undefined?reference?to?'std::_Rb_tree_decrement(std::_Rb_tree_node_base*) 的報(bào)錯,在 Android.mk 里增加:
NDK_ROOT=D:/Tools/SDK/android-ndk-r9d
STL_PATH=$(NDK_ROOT)/sources/cxx-stl/gnu-libstdc++/4.8/libs/armeabi-v7a
LOCAL_LDLIBS?+=?-L$(STL_PATH)?-lsupc++?\
-lgnustl_static
4、寫build腳本的時候,先編譯新加的庫再編譯 luajit ,以免各種編譯報(bào)錯(暫時未知原因)。
三、iOS環(huán)境
單獨(dú)寫build腳本,將靜態(tài)庫和動態(tài)庫的Armv7和Arm64版本都分別編譯出來之后,使用 libtool 進(jìn)行鏈接即可。