linux gcc使用筆記

來源:互聯網
上載者:User

1:我再開發了一個工程,用到了一個網上別人開發的讀取設定檔的標頭檔和C檔案,再ECLIPSE中編譯和調用都成功了的。但再GCC命令的時候卻說始終找不到調用的函數。

問題所在:沒有包括第三方的庫檔案。

我用一個例子來告訴你怎麼樣在 C++ 裡使用C的標頭檔/函數。

比方說我有一個C的標頭檔叫 c.h, C的源碼檔案叫 c.c,內容分別是

c.h:
#ifndef _ASDFD_INCLUDED_
#define _ASDFD_INCLUDED_

#include <stdio.h>

extern int test(int a);

#endif

c.c:
#include "c.h"

int test(int a)
{
printf("A = %d\n", a);
return a*a;
}

現在我想在c++中使用c.c中提供的函數test(),我的c++檔案名稱字叫 a.cpp,那麼裡面跟C有關的部分就要用 extern "C" {} 大括弧括起來,看看我的
a.cpp:
#include <iostream>
using namespace std;

extern "C"
{
#include "c.h"
}

int main()
{
int b = 12;

b = test(b);

cout<<"b = "<<b<<endl;
return 0;
}

看到了吧,#include "c.h" 被 extern "C" {}括起來了。

然後是如何編譯,先把C檔案編出目標檔案(.o)來
gcc -c c.c
你會看到產生了 c.o,其實,有目標檔案就夠了,如果你一定要做成(靜態/動態)庫檔案,也是可以的,不過我這裡就不深入了,做成庫和直接用目標檔案對解決你的問題沒有任何區別。

然後再編譯C++檔案,也就是我的 a.cpp
g++ -o hello a.cpp c.o
看到了吧,我在編譯 a.cpp 的時候把C產生的 c.o也加上了。 然後產生 可執行檔 hello, 運行
./hello
就可以看到
A = 12
b = 144


關於建立靜態庫,假定你有3個C檔案, a.c, b.c, c.c 提供了你C++要用到的介面,那麼可以把這三個C檔案編譯出來的目標檔案放到一個庫檔案裡供C++使用,方法為

先編譯出目標檔案
gcc -c a.c b.c c.c

這時候你應該看到有 a.o b.o c.o了

然後建立庫檔案
ar cr libtest.a a.o b.o c.o

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.