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的代码,就不用开源。