从Julia调用C/C++

4
我正在尝试使用C++为Julia编译动态库。 我在Windows上使用CLion。当我使用MinGW编译时,ccall可以完美地与dll配合使用。 但是当我使用MSVC编译时,Julia ccall无法找到该函数。有人知道原因并且该如何解决吗?我必须使用MSVC.. 样例代码:
test.h

extern "C" int add2(int in);


test.cpp

#include "test.h"

int add2(int in){
return in+2;
}

感谢您的输入,但问题仍然存在... - Adam
1个回答

1

找到了答案。MSVC编译器需要明确的指令才能输出/输入extern "C"函数。以下代码适用于MSVC,并被Julia的ccall识别:

test.h

extern "C" __declspec(dllexport) int add2(int in);


test.cpp

#include "test.h"

int add2(int in){
return in+2;
}

为了导入一个extern "C"函数,可以使用以下方式:
 __declspec(dllimport)

编辑: 这与编译器无关,而是所有dll文件都需要的。 显然MinGW会自动执行此操作。


这与函数的 extern "C" 无关。您始终需要使用 __declspec(dllexport) 来导出 DLL 中的函数。 - walnut
好的,但出于某种原因,它在没有该指令的MinGW下也能工作。 - Adam
1
看起来MinGW的链接器默认导出所有符号,请参见https://dev59.com/N3E85IYBdhLWcg3wXCW1。 - walnut
谢谢,已添加到答案中。 - Adam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接