linux 编译cpp(ubuntu怎么编译)

大家好,关于linux 编译cpp很多朋友都还不太明白,今天小编就来为大家分享关于ubuntu怎么编译的知识,希望对各位有所帮助!

如何在linux编译和使用ACE

一:下载源码

目前最新版本6.1.2。如果只使用ACE,可以选择选择ACE only(tar+gzip format)。

二:编译

2.1设置环境变量

在当前用户目录下,找到.bash_profile(centos版本)文件或.profile(ubuntu版本)文件,在该文件末尾增加内容:

export PATH

export ACE_ROOT=/home/yleesun/3rd/ACE_wrappers

export LD_LIBRARY_PATH=$ACE_ROOT/ace:$ACE_ROOT/lib:$LD_LIBRARY_PATH

具体ACE_ROOT的路径,根据实际情况修改。

2.2执行编译命令

在$ACE_ROOT/ace目录下运行命令:

ln-s config-linux.h config.h

在$ACE_ROOT/include/makeinclude目录下执行命令:

ln-s platform_linux.GNU platform_macros.GNU

回到目录$ACE_ROOT下,执行命令:make

大概20分钟左右编译完成。

三:使用ACE编程

ACE库编译完成,下面写个程序试试。

#include<ace/Log_Msg.h>

#include<ace/OS_main.h>

using namespace std;

int ACE_TMAIN(int argc, ACE_TCHAR*argv[])

{

ACE_DEBUG((LM_DEBUG, ACE_TEXT(“Hello World!”)));

return 0;

}

该文件命名为acetest.cpp

执行下面命令进行编译:

g++-I$ACE_ROOT-lACE-L$ACE_ROOT/lib-o acetest acetest.cpp

编译成功,运行:

./acetest

打印出:Hello World!

注意:g++命令后面到参数

-I$ACE_ROOT//指定包含到头文件路径,此处是大写的 I,include的第一个字母到大写。

-lACE//指定包含到库名称,此处是小写的 l,library的第一个字母到小写。

-L$ACE_ROOT/lib//指定依赖库到路径,此处是大写到L,library的第一个字母到大写。

Linux下用g++编译c程序出错。。

我用一个例子来告诉你怎么样在 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

这三个目标文件就放入 libtest.a这个静态库中了,然后编译C++程序(你的C++程序应该已经按照我前面说的用 extern"C"把C的接口都括起来了),假定你的 libtest.a放在/home/aaa/lib下

g++-o my.exe my.cpp-L/home/aaa/lib-ltest

就会生成可执行文件 my.exe了。

linux 下如何编译并运行 C++Builder编的程序

C++ Builder曾经貌似有 Linux版。

不过貌似现在已经没了……

所以,需要进行代码移植,把引用库改为 Linux下面提供的。界面调用也要改。

工程比较大,不过比 Virual Stdio的改动小无数倍。

建议还是继续保持 Windows程序,之用用 wine来跑。

针对 wine进行优化貌似比移植程序需要的时间少,毕竟是 C++ Builder的程序应该问题不大。

不用担心 GPL的问题,Wine是 LGPL的,不直接使用 wine的代码,就不用开源。

阅读剩余
THE END