C++調用C連結庫

來源:互聯網
上載者:User

C++調用C連結庫

  C++調用C語言的連結庫,其實相對C調用C++簡單。因為C++本來就向下相容C吧(個人見解)。

  但由於編譯器的設計不同,會出現一些問題,如下:(如中間部分,有一句undefined reference to 'helloC()'  ,helloC()是我在C連結庫中的函數)

  

簡單說來原因就是未經處理的C代碼編譯後函數名可能變為_helloC()之類的,而C++編譯後函數名卻不是這樣,所以就對不上。

詳細解釋見http://www.cnblogs.com/kenkofox/archive/2009/11/05/1597053.html

需要在include C的檔案的時候加上extern "c"

 

  在練習中,寫了三個檔案:c.h  c.c  cpp.cpp 前兩個編譯為C連結庫,cpp.cpp使用C。驗證了C++可以訪問到C的全域變數。

  c.h:

#include "stdio.h"

void helloC();

int abc = 1;

 

  c.c:

#include <stdio.h>
#include "c.h"

void helloC(){
printf("I am Kenko");
}

 

  cpp.cpp:(重點在於如何include)

#include <iostream>
using namespace std;
extern "C" {
#include "c.h"
}
int main(){
helloC();
cout<<abc<<endl;
return 0;
}

 

  至於編譯:

  1.連結庫:gcc -shared -o libccall.so c.c

  2.編譯cpp.cpp:g++ cpp.cpp ./libccall.so

 

  

  

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.