版主:我没分了,还能请教你问题吗?

BAO BAO 2018-12-14 11:44:04
之前没用过c++ builder编译器, 想请教几个问题:
我安装的是6.0版本,这个不分debug和release编译模式吗?
如果修改了默认函数入口,用什么编译参数(或设置哪里)可以编译通过?
还有个问题是有类似vc连接外部DOS程序到dos stub的参数选项吗?
...全文
473 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
要缩小exe体积主要是减小RTL和C库代码的大小,但是可用的基本库也受限制了。CB的RTL启动代码c032w.obj/c032x.obj之类的大小就有2K多,c库cw32.lib之类的至少也要链接进几十K,所以正常生成的.exe,即便只有一句printf,大小也有几十K。进一步缩小exe可以使用修改的启动代码和基本c库,网上能找到cw32tiny.lib,实际上就是老版的Borland C++的c库,用tlib工具把基本模块解出来重新打包。
过客猫2022 2018-12-25
  • 打赏
  • 举报
回复
引用 7 楼 那年那人 的回复:
最近发现茶馆很热闹啊? 问题解决两个了,你们都是技术高手,剩下的问题,谁知道的教教我啊? 修改函数入口后(main),怎么编译?(用宏跟不用没啥区别, 预处理的时候就给替换了.) 我看了def模块定义文件的语法了, 如果是想在编译链接的时候合并一些section,该怎么写啊? 网上关于bcb的资料太少了, 都搜不到有有关的资料,谁知道怎么解决的,教教我吧。
C++Builder没钱途,建议放弃,然后没事这里灌灌水就可以了。
过客猫2022 2018-12-25
  • 打赏
  • 举报
回复
引用 3 楼 那年那人 的回复:
[quote=引用 1 楼 ooolinux的回复:]工程选项里有debug和release的设置。 修改了默认函数入口,什么意思? 连接外部DOS程序,什么意思?
函数入口就是类似winmain和main之类的呀,至于最后一个问题,你要是了解PE结构就知道我想问的是什么了,vc下有个参数/stub可以实现,bcb没找到类似的参数。不过还是很感谢你的回答,这个群里也就你最热情了,你是个好人呀。 我觉得版主应该让你来当。[/quote] 这个一般不需要的吧。你可以建一个console的工程,这样main就很明显了。
过客猫2022 2018-12-25
  • 打赏
  • 举报
回复
不知道分有什么用?
BAO BAO 2018-12-25
  • 打赏
  • 举报
回复
确实是这样啊,程序小了,还要带一个动态链接库。。。
就使用了一个弹窗api。。。



修改函数入口呢?是这样的,之前我没接触过bcc, 用vc和gcc的时候如果代码很少,修改了主函数入口,可以减少很多的体积,就上面的代码,修改函数入口后,不连接那些什么标准启动信息什么的了,就是2kb了,也能单独运行;我以为bcc 也是这样的, 听你们这样说,我感觉,bcc编译器跟别的都不一样呢。。。
再吐槽下bcc现在的官网,下载个编译器,真的很烦人啊。。。
不过那个bcc32c 7.2 头文件更新了,支持了好多新api, 学习用下还行吧。
过客猫2022 2018-12-25
  • 打赏
  • 举报
回复
引用 8 楼 早打大打打核战争 的回复:
直接编译呀,指定入口点这功能本来就没啥用,不管main、WinMain、DllMain之类的都是语言约定的名字,编译后只是一个地址,Delphi中的主函数干脆就是无名的,省了这个烦恼。 #define main1 (main) // 指定程序开始于main1 int main1() { // ... } int main2() { // ... } 和链接时用/entry:main1难道不是一回事,后者唯一的优点是不需要改源程序。 合并section只需要指定同样的classname即可: sections xxx 'code' yyy 'code' code可以是随便起的任意名字
其实没必要改默认的,只要自己写一个,然后在main调用自己的就可以了。
  • 打赏
  • 举报
回复
昵称zdhsoft、林炎... 我知道你是冬瓜猫~~~
  • 打赏
  • 举报
回复
IDE里的设置是默认使用动态RTL,程序发布要带上rtlxxx.bpl(xxx是版本数字),这个·dll好几MB大。
命令行:bcc32 -tR xx.cpp
BAO BAO 2018-12-21
  • 打赏
  • 举报
回复
bcc32怎么编译的程序那么大,就几行代码就60kb了,在ide编译的带图标才几kb大小,原本以为ide也是调用命令行编译器,监控了下发现并未调用bcc32,那么bcc32命令行怎么编译的小一点呀?
BAO BAO 2018-12-20
  • 打赏
  • 举报
回复
最近发现茶馆很热闹啊?

问题解决两个了,你们都是技术高手,剩下的问题,谁知道的教教我啊?

修改函数入口后(main),怎么编译?(用宏跟不用没啥区别, 预处理的时候就给替换了.)
我看了def模块定义文件的语法了, 如果是想在编译链接的时候合并一些section,该怎么写啊?

网上关于bcb的资料太少了, 都搜不到有有关的资料,谁知道怎么解决的,教教我吧。
  • 打赏
  • 举报
回复
直接编译呀,指定入口点这功能本来就没啥用,不管main、WinMain、DllMain之类的都是语言约定的名字,编译后只是一个地址,Delphi中的主函数干脆就是无名的,省了这个烦恼。
#define main1 (main) // 指定程序开始于main1

int main1()
{
// ...
}

int main2()
{
// ...
}
和链接时用/entry:main1难道不是一回事,后者唯一的优点是不需要改源程序。

合并section只需要指定同样的classname即可:
sections
xxx 'code'
yyy 'code'
code可以是随便起的任意名字
BAO BAO 2018-12-19
  • 打赏
  • 举报
回复
引用 5 楼 早打大打打核战争的回复:
还没有发现CB的连接器有类似ms link的/entry修改入口点功能,感觉这功能没啥用,非要的话,可以用宏实现:
#define myfunc (main)
程序中不要有名叫main的函数即可

替换默认stub,没有直接的命令行参数,但是可以写个def文件,比如叫test.def:
内容:
stub 'xxx'
然后命令行编译:
bcc32 xxx.cpp -l test.def
64位:
bcc64 xxx.cpp -Wl,test.def
def文件可以设置很多生成参数,具体见:http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Module_Definition_Files
好的,我试试,谢谢啦,你也是个好人,也能当版主( ˙˘˙ )
ooolinux 2018-12-18
  • 打赏
  • 举报
回复
不太明白你想做什么。。
我水平不够,对版主也没兴趣,论坛倒是常来。
BAO BAO 2018-12-18
  • 打赏
  • 举报
回复
引用 1 楼 ooolinux的回复:
工程选项里有debug和release的设置。
修改了默认函数入口,什么意思?
连接外部DOS程序,什么意思?
函数入口就是类似winmain和main之类的呀,至于最后一个问题,你要是了解PE结构就知道我想问的是什么了,vc下有个参数/stub可以实现,bcb没找到类似的参数。不过还是很感谢你的回答,这个群里也就你最热情了,你是个好人呀😄。 我觉得版主应该让你来当。
  • 打赏
  • 举报
回复
还没有发现CB的连接器有类似ms link的/entry修改入口点功能,感觉这功能没啥用,非要的话,可以用宏实现:
#define myfunc (main)
程序中不要有名叫main的函数即可

替换默认stub,没有直接的命令行参数,但是可以写个def文件,比如叫test.def:
内容:
stub 'xxx'
然后命令行编译:
bcc32 xxx.cpp -l test.def
64位:
bcc64 xxx.cpp -Wl,test.def
def文件可以设置很多生成参数,具体见:http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Module_Definition_Files
ooolinux 2018-12-15
  • 打赏
  • 举报
回复
版主正在赶来的路上。。
ooolinux 2018-12-15
  • 打赏
  • 举报
回复
工程选项里有debug和release的设置。
修改了默认函数入口,什么意思?
连接外部DOS程序,什么意思?

552

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 茶馆
社区管理员
  • 茶馆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧