vs2015开发so动态库linux
动态库代码
.h
#pragma once
int max(int a, int b);
.c
#include <stdio.h>
//int main()
//{
// printf("hello from ConsoleApplication7!\n");
//
// printf("this is my so dll test project");
// return 0;
//}
/************************************************************************/
/* 构造函数 */
/************************************************************************/
void __attribute__((constructor)) x_init(void)
{
printf("----so lib is loaded\n");
}
/************************************************************************/
/* 析构函数 */
/************************************************************************/
void __attribute__((destructor)) x_fini(void)
{
printf("----so lib is unload\n");
}
int max(int a, int b)
{
printf("enter in max\n .. \n");
return a > b ? a : b;
}
调用
.c
#include <stdio.h>
#include <dlfcn.h>
typedef int(*fn_max)(int a, int b);
int main()
{
printf("entery in main\n");
void* hdl = dlopen("liblinuxdlltest.so.1.0", RTLD_NOW);//RTLD_LAZY
if (!hdl)
{
printf("load dll fail\n");
return;
}
fn_max max = (fn_max)dlsym(hdl, "max");
char* perr = dlerror();
if (perr)
{
printf("load symbol failed: %s\n", perr);
return;
}
int result = max(200, 123);
printf("the max is %d\n", result);
dlclose(hdl);
printf("exit main\n");
return 0;
}