首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在C或C++中获取/链接外部函数?

在C或C++中获取/链接外部函数,通常需要使用动态链接库(Dynamic Link Library,简称DLL)或共享库(Shared Library,简称SO)。以下是一个简单的示例,展示了如何在C++中使用动态链接库。

  1. 创建动态链接库的源代码文件(例如:my_dll.cpp):
代码语言:cpp
复制
#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;
    }
}
  1. 编译动态链接库:

在Windows上,使用以下命令编译动态链接库:

代码语言:bash
复制
g++ -shared -o my_dll.dll my_dll.cpp

在Linux上,使用以下命令编译动态链接库:

代码语言:bash
复制
g++ -shared -o libmy_dll.so my_dll.cpp
  1. 创建一个使用动态链接库的应用程序(例如:main.cpp):
代码语言: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;
}
  1. 编译并运行应用程序:

在Windows上,使用以下命令编译应用程序:

代码语言:bash
复制
g++ main.cpp -o main.exe

在Linux上,使用以下命令编译应用程序:

代码语言:bash
复制
g++ main.cpp -o main

运行应用程序,将会输出结果:

代码语言:txt
复制
Result: 7

这个示例展示了如何在C++中使用动态链接库获取外部函数。在实际应用中,可能需要根据具体需求进行调整。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券