関数を使用するプログラムを実行しようとしてい__builtin_popcountll
ます。以下に示すように、コマンド/フラグを使用してソースファイルをコンパイルするmakefileを使用してコードをコンパイルすると:
g++ -c -Wall `pkg-config opencv --cflags` -I./include -O3 -fopenmp -msse4.2 src/Utils.cpp -o src/Utils.o
エラー/警告なしでコンパイルされます。ただし、オブジェクト (.o) ファイルをリンクして実行可能ファイルをビルドしようとすると、undefined symbols
エラーが発生します。
コマンドは次のとおりです。
g++ src/BoostDesc.o src/Utils.o src/main.o `pkg-config opencv --libs` -lgomp -o main
これは完全なエラーです:
Undefined symbols for architecture x86_64:
"___builtin_popcountll", referenced from:
__ZN9boostDesc5Utils12matchHammingERKN2cv3MatERKSt6vectorIS2_SaIS2_EERS5_IS5_INS1_6DMatchESaISA_EESaISC_EE.omp_fn.0 in Utils.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
make: *** [main] Error 1
Apple の Web サイトhereで gcc のマニュアル ページを調べたところ、フラグが機能することが示唆されており、g++ でも機能するはずだと思います。誰かがこの組み込み関数を使用する可能性を確認または反論できますか? サンクス!
g++ --version
これを返します:
i686-apple-darwin11-llvm-g++-4.2 (GCC) 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.11.00)