我正在尝试运行一个使用__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 网站上的 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)