当前位置:首页 » 操作系统 » 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

热点内容
ig加密语音 发布:2024-10-11 12:19:25 浏览:485
钉图上传 发布:2024-10-11 12:11:27 浏览:477
脚本个 发布:2024-10-11 12:10:43 浏览:149
刚性攻丝的编程 发布:2024-10-11 12:10:39 浏览:467
怎么登录安卓版全民tv 发布:2024-10-11 12:10:33 浏览:622
服务器接收的参数名是什么 发布:2024-10-11 12:05:38 浏览:640
c语言中的goto 发布:2024-10-11 11:57:14 浏览:394
小司马编程 发布:2024-10-11 11:45:03 浏览:83
未使用标签进行编译 发布:2024-10-11 11:45:00 浏览:835
java开发源码下载 发布:2024-10-11 11:39:22 浏览:749