如果有人设法将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
答案 0 :(得分:3)
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字节边界上。)