如果有人成功地将HCRF2移植到Mac OS X,我很感兴趣。我在使用malloc.h构建cpp文件时遇到了问题。显然,这是一个不推荐使用的包,没有太多内容告诉你如何使用它移植程序。如果有任何帮助,我将不胜感激,因为我不是C++人员。
[ 2%] Building CXX object hCRF/CMakeFiles/hCRF.dir/src/matrixSSE2.cpp.o
/Volumes/LocalScratchHD/LocalHome/savkov/Software/HCRF2.0b/libs/shared/hCRF/src/matrixSSE2.cpp:9:10: error: 'malloc.h' file not found with <angled> include; use "quotes" instead
#include <malloc.h>
^~~~~~~~~~
"malloc.h"
/Volumes/LocalScratchHD/LocalHome/savkov/Software/HCRF2.0b/libs/shared/hCRF/src/matrixSSE2.cpp:89:20: error: use of undeclared identifier 'memalign'
pData = (double*)memalign(16, size*sizeof(double));
^
2 errors generated.
make[2]: *** [hCRF/CMakeFiles/hCRF.dir/src/matrixSSE2.cpp.o] Error 1
make[1]: *** [hCRF/CMakeFiles/hCRF.dir/all] Error 2
make: *** [all] Error 2
更新:
我把malloc.h复制到源文件夹中,事情就更进一步了。现在我得到另一个错误:
/.../HCRF2.0b/libs/shared/hCRF/src/matrixSSE2.cpp: In member function 'void Matrix<elType>::create(int, int, elType) [with elType = double]':
/.../HCRF2.0b/libs/shared/hCRF/src/matrixSSE2.cpp:89:52: error: 'memalign' was not declared in this scope
OSX缺少memalign()
,但它有posix_memalign()
。它的签名与memalign()
不同,所以您必须稍微调整一下源。您所在的位置:
pData = (double*)memalign(16, size*sizeof(double));
你可以把它重写为(未经测试的):
err = posix_memalign((void **)&pData, 16, size*sizeof(double));
但我相信OSX总是在16字节的边界上进行分配。如果是这种情况,您可以同样轻松地使用malloc()
:
pData = (double *)malloc(size*sizeof(double));
(如果你走这条路,最好包括一个断言,验证pData在16字节的边界上。)