Linux下C++調用C動態庫使用


動態庫編譯

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

三種方法解決

  1. 將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
    
  2. 將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
    
  3. 將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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM