cbuilder静态编译
1. codeblocks+mingw怎么实现静态编译
你在设置->编译器与调试器->连接器设置->其他链接器选项 里面加:-static
这样因该最直接。
你是不是出现丢失libgcc_s_dw2-1.dll
这个出现在用g++ 编译C的情况,如果你只用到那个C,而不用C++的话可以修改工具链可执行文件中动态链接器:把mingw32-g++.exe改为mingw32-gcc.exe,连接器就不用加-static了。
如果把动态链接器改为mingw32-gcc.exe 编译C++的时候你就要在链接器选项里加
-lstdc++ -static两个选项了。
总之:如果你只用C++的话,应该不会出现这个问题。
只用C的话,建议你修改工具链可执行文件中动态链接器:把mingw32-g++.exe改为mingw32-gcc.exe
2. C++ Builder 2010 怎么静态编译
可以配置一下两项:项目 -> 配置属性->常规->MFC的使用 :在静态库中使用MFC(此项必须设置)。
项目 -> 配置属性->C/C++->代码生成->运行库 :选择/MT。(此项可选,设置之后部分机器可能会编译出错)
3. 如何使用C++Builder编译Delphi使用Obj文件
一直以来,Delphi 都可以用命令行 dcc32 ProjectName.dpr 对项目进行编译链接,非常方便,Delphi对项目文件的参数配置处理的很简单,便于阅读处理起来也很直观,编译的中间文件也很简单(dcu,dcp)。
而C++Builder就没那么幸运了,因为包含了C++的特征,各种编译的中间文件:lib,obj,res,map,tds。后来新版又增加了一些预编译文件:ilc,ild,ilf,...,pch,#00,...等等等等,各种搜索路径(Include Path,Library Path,Browse Path...),要是用bcc32及ilink32手工进行编译链接,命令的参数都足够写上大半天。幸好,在旧版C++Builder中,如果要用命令行编译BCB项目,只要将bpr文件转换为mak文件,再使用make命令进行编译链接也比较方便,不需要过多的处理:
[plain] view plainprint?
bpr2mak -oProject1.mak Project1.bpr
make -fProject1.mak
自从Delphi/C++Builder开始使用 MSBuild* 编译系统后(好像是RAD Studio 2006开始,具体忘记了),Delphi项目在保存为dpr的同时,也会保存一份dproj的项目文件,dpr依旧沿用旧格式,dproj 则以MSBuild规范以XML格式保存,除了可以用旧方式命令行编译dpr外,也可以用:
[plain] view plainprint?
msbuild.exe /t:Rebuild /p:Config=Debug ProjectName.dproj
进行编译,但msbuild必须设定一些环境变量,RAD Studio自带了一个命令行工具已经做好了这些,其实就是设定了以下几个环境变量($(BDS)\bin\rsvars.bat):
[plain] view plainprint?
@SET BDS=C:\Embarcadero\RAD Studio\7.0
@SET BDSCOMMONDIR=C:\Users\Public\Documents\RAD Studio\7.0
@SET FrameworkDir=C:\Windows\Microsoft.NET\Framework\v2.0.50727
@SET FrameworkVersion=v2.0.50727
@SET FrameworkSDKDir=
@SET PATH=%FrameworkDir%;%FrameworkSDKDir%;%PATH%
@SET LANGDIR=EN
C++Builder则又更杯具了一些,bpr2mak.exe工具已经没有了,所以只能采用MSBuild进行命令行编译。更加杯具的是,随着Delphi和BCB被多次转卖收购,新版本的发布似乎总会有各种各样的Bug,比如手头的RAD Studio 2009进行命令行编译,Delphi正常,BCB则报出超过100个错误,类似如下:
[plain] view plainprint?
C:\Embarcadero\RAD Studio\7.0\Bin\CodeGear.Cpp.Targets(2175,3): error : Error: Unresolved external '__fastcall Strhlpr::UnicodeFree(System::UnicodeString&)' referenced from C:\EMBARCADERO\RAD STUDIO\7.0\LIB\DEBUG\VCLE.LIB|ustring
C:\Embarcadero\RAD Studio\7.0\Bin\CodeGear.Cpp.Targets(2175,3): error : Error: Unresolved external 'Typinfo::BooleanIdents' referenced from C:\EMBARCADERO\RAD STUDIO\7.0\LIB\DEBUG\VCLE.LIB|vclinit
检查了一下发现编译过程(bcc32.exe)没有问题,只是在ilink32.exe链接过程中报错,在IDE中打开此项目进行编译,查看Message->Output窗口,比较两者的ilink32命令行参数,发现两者有两个地方有明显差异,一个是IDE生成的命令中没有类似 C:\Embarcadero\RAD Studio\7.0\lib\EN\debug 的路径(指的是EN这个目录,去除上面rsvars.bat中的@SET LANGDIR=EN 就可以避免产生这样的搜索路径) ,但是虽然这个目录不存在,也应该不至于导致出错。第二个差异是缺少了rtl.bpi和vcl.bpi的附加obj参数,解决办法是在$(BDS)\bin目录中找到 CodeGear.Cpp.Targets 文件,用记事本打开,搜索字符“memmgr.lib“,在前面加上"rtl.bpi;vcl.bpi" (用;分隔,不含引号),一共有两处要修改。或者查找 "c0w32",在后面加上 "rtl.bpi;vcl.bpi",只有一处修改 —— 因为IDE的命令行中 rtl.bpi vcl.bpi是在c0w32和memmgr.lib中间的。—— (注意:在XE2中,加在c0w32后面已经不管用了,编译会报另一个错误VCL.BPIW.OBJ不存在,Targets文件有很大变化,可能参数的位置变动过了,导致与其他参数混在一起,所以还是加到memmgr.lib处更加合理)。
一些组件包比如DevExpress的Package,没有dproj或者cproj 项目文件,只能通过IDE进行转换,但坑爹的是bpk在好几个版本以前(CRS 2007?)已经不支持bpk项目,根本打不开也谈不上转换了,但它其实是一个make文件,可惜用make命令编译还是要出错,不想去研究了。总之,BCB永远活在Delphi的阴影下。
4. Qt Creator 怎样设置才能实现静态编译
qt默认的编译方式是动态编译的,但是有时候编写的程序要发布出去,带很多动态库文件是很繁琐的,此时就需要静态编译程序,qt要实现静态编译必须库文件也是静态编译的,可以用这个命令编译静态库:
1.将c:\qt\2010.05\qt\mkspecs\win32-g++\qmake.conf文件中的qmake_lflags
=
-enable-stdcall-fixup
-wl,-enable-auto-import
-wl,-enable-runtime-pseudo-reloc
改为
qmake_lflags
=
-static
-enable-stdcall-fixup
-wl,-enable-auto-import
-wl,-enable-runtime-pseudo-reloc
2.在开始菜单里找到qt
command
prompt并运行,输入命令:
configure
-static
-debug-and-release
-no-exceptions
-l
"c:\qt\2010.05\qt\include"
-l
"c:\qt\2010.05\qt\lib"
-l指定一下路径,防止用到vc的头文
5. cbuilder是什么它与c++builder是一样的吗
没有听说过什么c
builder
呀,
Borland
C++
Builder
是Borland
公司开发的用于C/C++开发的IDE(
集成开发环境
)
1、没有听说过c
builder
2、如果有的话应该是差不多的
IDE,IDE是
编译器
,
解释器
,编缉器等的集合体
3、按字面解释的话,c
builder
应该只能编译c语言,C++
Builder
有一款开发环境就是Borland
公司的Borland
C++
Builder
,可以编译C/
C++语言
。
6. 如何编译C/Fortran动态/静态链接库
首先,传统的编译,也就是静态编译是把 源文件 翻译成目标文件,这个是一次性过程,也就是你所谓的静态编译。
后来的Java和.NET等语言,首先编译成中间形式,然后运行过程中根据需要编译成本地代码(注意这个过程不是一次性的,下次运行重新编译),这个就是JIT(即时编译)技术,从即时编译发展出了动态编译技术
————————————
(传统的)编译完成后,像C/C++、Fortran、汇编等语言,可以把多个目标文件合并到一个库文件中,这个就是静态库。比如常说的库函数printf就是libc里面的函数。
如果有了启动函数(main),main里面使用了printf,就可以通过静态链接技术,从libc中提取出printf所在的文件加入到可执行文件中,如果printf还需要其它函数,就继续搜索并加入列表,直到形成一个闭包。这个就是静态链接。
可是静态链接有个明显的缺点,如果每个程序都需要printf,那么printf这个函数的代码就会同时存在在每个程序中,这样也太占地方了吧。所以发明了动态连接技术,其实有两种形式。无论哪一种,都是首先记录下需要调用printf这个函数以及所在的动态库,等到运行的时候再加载动态库,从动态库中找到真正的printf去执行。
由于,动态链接技术需要一些额外的信息,传统的静态库是不具备的,这些额外信息主要是重复加载和卸载时所需要的一些代码,因此需要动态链接库。
7. 请问在c++builder中如何调用mingw编译的.a静态链接库
在MakeFile中 把.a的路径加到库中就行了
8. c语言有静态编译吗
你说的是库吧,不是头文件,头文件没关系,
如果要静态编译,使用gcc的话,只要加上-static选项就行了
9. 如何使用c builder
新建一个Console Application或者Console Wizard就可以调试C/C++程序了(无需保存工程,可以内存编译),比VC++要简单。
10. Borland C++ builder怎么使用,用来编译C++程序库文件是iostream.h
看来,你是想用bcb学习c++,对吧,那么 你不用深入学习bcb中的各个控件了,只要运行bcb的 控制台程序就可以用c++了,实际上很多人用vc++学习c++,也是用vc++的控制台程序学习的。
你可以这样做。
1、启动bcb,bcb会自动生成一个form可视框架,既然你编写控制台程序,你直接选择 File菜单中的Close All,关闭它就行了。
2、打开File菜单,选择New,然后选择other,会弹出一个对话框,里边很多选项,你选择 console wizard即可,然后出现一个小对话框,默认使用c++语法,并且提示你输入你要建立的 工程的目录,也就是说你想把你编写的程序放在哪个目录下。你打勾special project source,然后在编辑框里输入你要存放的目录;去掉复选框的use VCL选择,点击ok即可。
3、在新的对话框中 选择 create a new unit, 点击ok;
4、现在就可以编写代码了。
例如: 你输入
#include <iostream>
#include <conio.h>
using namespace std;
void main()
{
cout<<" ok"<<endl;
getch();
}
就可以运行了,注意:与vc++不同的是,bcb的控制台程序运行完后,dos窗口马上结束,不会停顿,所以我一般加上getch();函数,等到你按下一个键才结束程序,用这个需要加上头文件#include <conio.h>。
我说的很详细了,给点分吧。以上回答适用于bcb6.0