動態庫編譯
ShareLib1.h
#ifndef __SHARELIB1_H__
#define __SHARELIB1_H__
#ifdef __cplusplus
extern "C" {
#endif
void ShareLib1_Print();
#ifdef __cplusplus
}
#endif
#endif
ShareLib1.c
#include "ShareLib1.h"
#include<stdio.h>
void ShareLib1_Print()
{
printf("Share Lib Print 1\n");
}
編譯動態庫命令
code@code-VBox:~/code/unix/sharelib$ gcc ShareLib1.c -fPIC -shared -o libShareLib1.so
code@code-VBox:~/code/unix/sharelib$ ls
libShareLib1.so ShareLib1.c ShareLib1.h
動態庫使用
C++調用C的動態庫
main.cpp
#include"ShareLib1.h"
int main(void)
{
ShareLib1_Print();
return 0;
}
編譯main.cpp
code@code-VBox:~/code/unix/sharelib$ g++ main.cpp -L. -lShareLib1
code@code-VBox:~/code/unix/sharelib$ ls
a.out libShareLib1.so main.cpp ShareLib1.c ShareLib1.h
此時直接執行./a.out會報錯如下
code@code-VBox:~/code/unix/sharelib$ ./a.out
./a.out: error while loading shared libraries: libShareLib1.so: cannot open shared object file: No such file or directory
三種方法解決
-
將libShareLib1.so所在路徑添加到LD_LIBRARY_PATH,然后再執行./a.out,該方法當當前窗口關閉后失效。
code@code-VBox:~/code/unix/sharelib$ export LD_LIBRARY_PATH=/home/code/code/unix/sharelib:$LD_LIBRARY_PATH code@code-VBox:~/code/unix/sharelib$ ./a.out Share Lib Print 1
-
將libShareLib1.so放到/usr/lib目錄下
code@code-VBox:~/code/unix/sharelib$ sudo cp libShareLib1.so /usr/lib/ [sudo] password for code: code@code-VBox:~/code/unix/sharelib$ ./a.out Share Lib Print 1
-
將libShareLib1.so寫到配置文件中
ShareLib1.conf
/home/code/code/unix/sharelib
將ShareLib1.conf放到lib config目錄下,然后重新加載lib config。
code@code-VBox:~/code/unix/sharelib$ sudo mv ShareLib1.conf /etc/ld.so.conf.d
code@code-VBox:~/code/unix/sharelib$ sudo /sbin/ldconfig
code@code-VBox:~/code/unix/sharelib$ ./a.out
Share Lib Print 1