動態的頭文件api.hlinux
#ifndef _API_H #define _API_H #ifdef DLL_IMPLEMENT #define DLL_EXPORT extern "C" #else #define DLL_EXPORT #endif DLL_EXPORT int mysum(int a, int b); #endif // _API_H
動態庫的源文件api.cppios
#define DLL_IMPLEMENT #include "api.h" #include <iostream> DLL_EXPORT int mysum(int a, int b) { std::cout << "This (mysum) is a c++ function." << std::endl; return a + b; }
調用動態庫的測試代碼main.cc++
#include <stdio.h> #include "api.h" int main() { int sum = mysum(8, 3); printf("The sum is %d\n", sum); }
下面在命令行測試:windows
g++ -shared -fPIC -o libmyapi.so api.cpp #生成動態庫 gcc main.c -o a.out -L. -lmyapi #連接動態庫生成執行文件 ln -s /path/to/libmyapi.so /usr/lib/libmyapi.so #在系統的動態庫搜索路徑創建軟鏈接 ldconfig #讓系統從新搜索一遍動態庫 ./a.out #執行,下面是輸出
This (mysum) is a c++ function.
The sum is 11
動態的頭文件api.hapi
#ifndef _API_H #define _API_H #ifdef DLL_IMPLEMENT #define DLL_EXPORT extern "C" __declspec(dllexport) #else #define DLL_EXPORT extern "C" __declspec(dllimport) #endif #define MYAPI __stdcall DLL_EXPORT int MYAPI mysum(int a, int b); #endif // _API_H
動態庫的源文件api.cpp測試
#define DLL_IMPLEMENT #include "api.h" #include <iostream>int MYAPI mysum(int a, int b) { std::cout << "This (mysum) is a c++ function." << std::endl; return a + b; }
調用動態庫的測試代碼main.cspa
#include <stdio.h> #include "api.h" #pragma comment(lib, "./myapi.lib") int main() { int sum = mysum(8, 3); printf("The sum is %d\n", sum); }
windows在visual studio中測試便可命令行
overcode