當前位置:首頁 » 操作系統 » linuxc調用c

linuxc調用c

發布時間: 2022-05-17 10:35:05

A. 在linux系統中,如何運行一個c語言程序

1、打開kali linux的終端。創建一個文件並命名為test.c。在終端輸入:touch test.c。

B. 在Linux下,在C中怎麼調用C++的庫函數

調用C++函數庫,一般不能直接調用,需要將C++庫轉換成C介面輸出,方可以使用C調用
將 C++ 函數聲明為``extern "C"''(在你的 C++ 代碼里做這個聲明),然後調用它(在你的 C 或者 C++ 代碼里調用)。例如:
// C++ code:
extern "C" void f(int);
void f(int i)
{
// ...
}

然後,你可以這樣使用 f():
/* C code: */
void f(int);
void cc(int i)
{
f(i);
/* ... */
}

當然,這招只適用於非成員函數。如果你想要在 C 里調用成員函數(包括虛函數),則需要提供一個簡單的包裝(wrapper)。例如:
// C++ code:
class C
{
// ...
virtual double f(int);
};

extern "C" double call_C_f(C* p, int i) // wrapper function
{
return p->f(i);
}

然後,你就可以這樣調用 C::f():
/* C code: */
double call_C_f(struct C* p, int i);

void ccc(struct C* p, int i)
{
double d = call_C_f(p,i);
/* ... */
}

如果你想在 C 里調用重載函數,則必須提供不同名字的包裝,這樣才能被 C 代碼調用。例如:
// C++ code:
void f(int);
void f(double);

extern "C" void f_i(int i) { f(i); }
extern "C" void f_d(double d) { f(d); }

然後,你可以這樣使用每個重載的 f():
/* C code: */

void f_i(int);
void f_d(double);

void cccc(int i,double d)
{
f_i(i);
f_d(d);
/* ... */
}
注意,這些技巧也適用於在 C 里調用 C++ 類庫,即使你不能(或者不想)修改 C++ 頭文件。

再看下面的例子:
aa.cxx
#include "aa.h"
int sample::method()
{
cout<<"method is called!\n";
}
aa.h
#include
using namespace std;
class sample
{
public:
int method();
};
將上面的兩個文件生成動態庫libaa.so放到 /usr/lib目錄下,編譯命令如下
sudo g++ -fpic -shared -g -o /usr/lib/libaa.so aa.cxx -I ./
由於在C中不能識別類,所以要將上面類的成員函數封裝成C介面函數輸出,下面進行封裝,將輸出介面轉換成C介面。
mylib.cxx
#include "add.h"
#ifndef _cplusplus
#define _cplusplus
#include "mylib.h"
#endif

int myfunc()
{
sample ss;
ss.method();
return 0;
}
mylib.h
#ifdef _cplusplus
extern "C"
{
#endif

int myfunc();

#ifdef _cplusplus
}
#endif
在linux下,gcc編譯器並沒用變數_cplusplus來區分是C代碼還是C++代碼,如果使用gcc編譯器,這里我們可以自己定義一個變數_cplusplus用於區分C和C++代碼,所以在mylib.cxx中定義了一個變數_cplusplus用於識別是否需要「extern "C"」將函數介面封裝成C介面。但是如果使用g++編譯器則不需要專門定義_cplusplus,編譯命令如下:
g++ -fpic -shared -g -o mylib.so mylib.cxx -la -I ./
main.c
#include
#include
#include "mylib.h"
int
main()
{
int (*dlfunc)();
void *handle; //定義一個句柄
handle = dlopen("./mylib.so", RTLD_LAZY);//獲得庫句柄
dlfunc = dlsym(handle, "myfunc"); //獲得函數入口
(*dlfunc)();
dlclose(handle);

return 0;
}
編譯命令如下:
gcc -o main main.c ./mylib.so -ldl
下面就可以執行了。
需要說明的是,由於main.c 和 mylib.cxx都需要包含mylib.h,並且要將函數myfunc封裝成C介面函數輸出需要「extern "C"」,而C又不識別「extern "C"」,所以需要定義_cplusplus來區別處理mylib.h中的函數myfunc。
在main.c的main函數中直接調用myfunc()函數也能執行,這里介紹的是常規調用庫函數的方法。

C. 如何利用Linux控制台調用C/C++程序

shell(控制台)不能直接調用什麼函數,只能執行文件或命令

寫好的程序都是需要編譯鏈接成2進制文件的

最簡單的hello.c
#include<stdio.h>
int main(){
printf("hello world!");
return 0;
}
編輯好後輸入gcc -o hello hello.c進行編譯
gcc是一般linux都有的編譯器
-o後面的參數就是生成的2進制文件名,否則文件名是a.out
然後輸入./hello就可以運行了

因為二進制文件是可以直接執行的,需要在前面加上 ./ ,表示當前目錄

不知道你具體的要求是怎樣的

D. linux平台下C語言調用C庫問題

1:你平時在Linux下編程使用的read,write都是庫函數;
2:編程的過程可以是:調用庫函數,庫函數再去調用系統函數;也可以是直接調用系統函數,而這些系統函數是Linux內核定義的一些宏定義而已.兩種方法都是可以的.

E. linux環境,請問如何在C代碼中調用執行另一個C程序,謝謝了。

怎麼感覺概念好混亂,.c文件能夠「執行」么(又不是shell)?他編譯出來的.out才能夠執行吧。

可以用標准庫的:
#include <stdlib.h>

system(這里寫要執行的可執行文件的路徑的C字元串);

F. linux c++動態庫 調用 c動態庫函數

先把.cpp編譯成動態庫,編譯方法:
g++ *.cpp –fPIC –shared –o libtest.so -libyourclib.so
其中,*.cpp表示你的.cpp文件,你可以把它們一一列出,
–fPIC:表示編譯為位置獨立的代碼,不用此選項的話編譯後的代碼是位置相關的,所以動態載入時是通過代碼拷貝的方式來滿足不同進程的需要,而不能達到真正代碼段共享的目的。
–shared:指明編譯成動態庫。
libtest.so即為生成的動態庫,以lib開頭,方便後面使用
-libyourclib.so 是你的c動態庫名

編譯好之後,就可以來編譯你的測試程序了:
gcc test.c -o test -ltest
其中,test是生成的可執行程序
-ltest表示引用生成的動態庫libtest.so
大概過程就是這樣,你先試一試

G. Linux下的c編程:系統調用

標準的c函數庫是所有的編譯都要具有的函數庫,(實際上還是略有不同),但是這些基本上實現方法略有不同,但是結果和標準是一樣的。但是linux的系統調用,調用是linux的系統庫,比如說unistd.h下的fork這個是Linux下特有,你在vs上,就沒有這個庫,也沒有這個函數。同樣在vs上寫c,你可以引入頭文件比如windows.h,顯然這個庫是Linux不具有的。簡單說系統調用庫根據具體的操作系統環境不同而不同,而c標准庫,是所有支持c語言編譯器都有的。

H. Linux 下c語言怎樣調用C++的函數,怎麼編譯,舉個例子

完全和windows 下面沒有語法區別

在編譯之前我們需要在系統里安裝G++GCC,它們就是Linux下的C++/C的編譯器。代碼如下

代碼:


sudoapt-getinstallbuild-essential

sudoapt-getinstallgcc

sudoapt-getinstallg++


#include<iostream>

usingnamespacestd;

intmain()

{

cout<<"Hello,World! "<<endl;

return0;

}

另一個帶c++庫函數

#include<iostream>
#include<stack>
usingnamespacestd;
intsushu(intn)
{
inti;
for(i=2;i<n;i++)
{
if(n%i==0)
break;
}
if(n==i&&n!=1)
return1;
else
return0;
}
intmain()
{
intn,i,j;
stack<int>mystack;
cin>>n;
while(n>1)
{
for(i=2;i<=n;i++)
{
if(n%i==0&&sushu(i)==1)
{
mystack.push(i);
n=n/i;
break;
}
}
}
while(!mystack.empty())
{
cout<<mystack.top()<<"";
mystack.pop();
}
return0;
}

名稱為test.cpp

你使用

g++ test.cpp

./a.out


I. Linux中,運行一個C語言程序如何運行

1、打開kali linux的終端。創建一個文件並命名為test.c。在終端輸入:touch test.c。

J. 怎麼用linux寫c語言

Linux正在成為開發人員的編程天堂,成為開源和免費操作系統。 Turbo C編譯器已經是一種編譯程序的舊方法,所以讓程序員轉向Linux以獲得新的編程環境。 在本文中,我們將解釋如何編寫,編譯和運行一個簡單的C程序。 這將成為您遷移到可以在Linux上編寫和執行的更復雜和有用的C程序的基礎。

我們在Ubuntu 18.04 LTS系統上運行了本文中提到的步驟和命令。

我們將使用Linux命令行工具Terminal,以編譯一個簡單的C程序。 要打開終端,您可以使用Ubuntu Dash或Ctrl + Alt + T快捷方式。

第1步:安裝build-essential軟體包

為了編譯和執行C程序,您需要在系統上安裝必要的軟體包。 在Linux終端中以root用戶身份輸入以下命令:

sudo apt-get install build-essential

系統會要求您輸入root用戶密碼; 安裝過程將在此之後開始。 請確保您已連接到互聯網。

第2步:編寫一個簡單的C程序

安裝必要的軟體包之後,讓我們編寫一個簡單的C程序。

打開Ubuntu的圖形文本編輯器,將以下示常式序寫入或復制到其中:

#include<stdio.h>

int main()

{

printf("nA sample C program www.linuxidc.comnn");

return 0;

}

然後使用.c擴展名保存文件。 在這個例子中,我將我的C程序命名為linuxidc.c

或者,您可以通過gedit中的終端編寫C程序,如下所示:

gedit linuxidc.c

這將創建一個.c文件,您可以在其中編寫和保存程序。

第3步:使用gcc編譯C程序

在終端中,輸入以下命令以生成您編寫的程序的可執行版本:

句法:

$ gcc [programName].c -o programName

示例:

$ gcc linuxidc.c -o linuxidc

熱點內容
java的基本結構 發布:2024-10-11 15:12:24 瀏覽:730
大眾suv哪個內部配置好 發布:2024-10-11 14:30:39 瀏覽:93
緩存到資料庫失敗 發布:2024-10-11 14:27:44 瀏覽:678
我的世界手機國際怎麼創建伺服器 發布:2024-10-11 13:45:46 瀏覽:420
svnlinux命令 發布:2024-10-11 13:35:54 瀏覽:234
ig加密語音 發布:2024-10-11 12:19:25 瀏覽:487
釘圖上傳 發布:2024-10-11 12:11:27 瀏覽:479
腳本個 發布:2024-10-11 12:10:43 瀏覽:151
剛性攻絲的編程 發布:2024-10-11 12:10:39 瀏覽:469
怎麼登錄安卓版全民tv 發布:2024-10-11 12:10:33 瀏覽:624