在C或C++中获取/链接外部函数,通常需要使用动态链接库(Dynamic Link Library,简称DLL)或共享库(Shared Library,简称SO)。以下是一个简单的示例,展示了如何在C++中使用动态链接库。
#include<iostream>
// 导出函数
#ifdef _WIN32
#define EXPORT __declspec(dllexport)
#else
#define EXPORT
#endif
extern "C" {
EXPORT int my_function(int a, int b) {
return a + b;
}
}
在Windows上,使用以下命令编译动态链接库:
g++ -shared -o my_dll.dll my_dll.cpp
在Linux上,使用以下命令编译动态链接库:
g++ -shared -o libmy_dll.so my_dll.cpp
#include<iostream>
#include<windows.h> // 在Windows上使用动态链接库
// 或者
// #include <dlfcn.h> // 在Linux上使用动态链接库
typedef int (*MyFunction)(int, int);
int main() {
// 加载动态链接库
#ifdef _WIN32
HINSTANCE hDLL = LoadLibrary("my_dll.dll");
#else
void* hDLL = dlopen("libmy_dll.so", RTLD_LAZY);
#endif
if (hDLL == NULL) {
std::cerr << "Failed to load DLL"<< std::endl;
return 1;
}
// 获取外部函数的指针
#ifdef _WIN32
MyFunction my_function = (MyFunction)GetProcAddress(hDLL, "my_function");
#else
MyFunction my_function = (MyFunction)dlsym(hDLL, "my_function");
#endif
if (my_function == NULL) {
std::cerr << "Failed to get function pointer"<< std::endl;
return 1;
}
// 调用外部函数
int result = my_function(3, 4);
std::cout << "Result: "<< result<< std::endl;
// 卸载动态链接库
#ifdef _WIN32
FreeLibrary(hDLL);
#else
dlclose(hDLL);
#endif
return 0;
}
在Windows上,使用以下命令编译应用程序:
g++ main.cpp -o main.exe
在Linux上,使用以下命令编译应用程序:
g++ main.cpp -o main
运行应用程序,将会输出结果:
Result: 7
这个示例展示了如何在C++中使用动态链接库获取外部函数。在实际应用中,可能需要根据具体需求进行调整。
领取专属 10元无门槛券
手把手带您无忧上云