最近、Linux 3.10 x86_64 で Eastl ライブラリをビルドしようとしていますが、失敗しました。
https://github.com/electronicarts/EASTL
ここに「ソースのコンパイル」Webページがあります:
https://github.com/electronicarts/EASTL/blob/master/CONTRIBUTING.md
指示に従って libEASTL.a を取得します , ar -t libEASTL.a get :
allocator_eastl.cpp.o
assert.cpp.o
fixed_pool.cpp.o
hashtable.cpp.o
intrusive_list.cpp.o
numeric_limits.cpp.o
red_black_tree.cpp.o
string.cpp.o
thread_support.cpp.o
次に、小さなテスト ソース:
#include <EASTL/vector.h>
#include <EASTL/fixed_vector.h>
int main()
{
eastl::fixed_vector<int,10,true> v ;
int iarr[10] ;
for(int idx=0;idx<10;idx++){
iarr[idx] = idx + 1 ;
v.push_back( iarr[idx] ) ;
}
}
によってコンパイルされました:
g++ --std=c++11 -O2 test1.cpp -I/home/mars/tools/EASTL-master/include -I/home/mars/tools/EASTL-master/test/packages/EABase/include/Common /home/mars/tools/EASTL-master/thelib/libEASTL.a -o test1.exe
リンクエラーが発生します:
「演算子 new[](unsigned long, char const*, int, unsigned int, char const*, int)」への未定義の参照
Eastl ライブラリには、ヘッダー ファイルを簡単に構築してインクルードする方法が必要です。
編集 :
この新しい機能を追加した後、リンクエラーはなくなりました!!!
void* operator new[](size_t size, const char* pName,
int flags, unsigned debugFlags, const char* file, int line)
{
;
}
したがって、残っている唯一の質問は次のとおりです。この新しい関数を正しくコーディングする必要があります!!!! それを行うには、どのドキュメントでも手がかりを得ることができますか?!
編集2:
このウェブサイトの情報によると:
https://wuyingren.github.io/howto/2016/02/11/Using-EASTL-in-your-projects/
void* operator new[](size_t size, const char* pName, int flags, unsigned debugFlags, const char* file, int line)
{
return malloc(size);
}
void* operator new[](size_t size, size_t alignment, size_t alignmentOffset, const char* pName, int flags, unsigned debugFlags, const char* file, int line)
{
return malloc(size);
}
その後、作業は完了です。