编译64位的库

本文讲述了作者在将源码编译为64位库的过程中遇到的挑战,包括如何处理库之间的依赖关系,如boost、libx和liby。通过CMakeLists.txt文件进行配置,作者探讨了编译版本的选择(Release、Debug、RelWithDebInfo),如何检查编译结果是否为64位,以及如何确定连接的库版本。虽然在本机上编译成功,但在其他环境出现问题,可能与库的动态链接和版本不匹配有关。文章强调理解编译原理对解决此类问题的重要性。

今天老大布置了点任务,就是把源码编译成64位的库,其库依赖于其他的库,依赖关系如下:
1. boost库
2. 公司内部库libx
3. 另一个库liby(只有头文件)

此前看了几天的CMake,但是还不熟练,正好有项目练练手,拿到源文件后,打开CMakeLists.txt一看,写得很规范,很有条例;

虽然需求明确了,但是还是不知道怎么入手,此前也没有怎么使用到其他的库文件,不管是静态库还是动态库,唯一用过的库就是以前使用C#的库,但是库都是自己编写的,在同一个“解决方案资源管理器”中的,调用起来很方便。但是此时,感觉不知道怎么入手。

后来老大来提醒一下,要把其他的库先编译成64位的,如果按照以前的做法,就是先自己在vs建一个工程,然后把源代码拷进去,然后F5生成;但是这种方法很原始,很白痴,没有什么技术含量;

然后怎么编译好呢?看了源码的文件夹都有一个CMakeLists.txt文件,用CMake生成一个64位的vs工程,在编译成debug release RelWithDebInfo的版本就好了,再在最后的那个库里面连接这些依赖的库。

但是那时候思路有点凌乱,还是不知道怎么入手去编译依赖的几个库,另外boost库的编译有些不同,网上找了bjam的参数,
bjam --toolset=msvc address-model=64 stage 就能编译成64位的库了。
此时就有其他的问题:
1. 要编译成什么版本的(Release Debug)?
2. 怎么知道编译出来是不是64位的?
3. 怎么知道是Release版本还是Debug版本?
4. 编译出来之后应该连接到Release版本还是Debug版本?

然后继续编译libx库,并生产Release版本、Debug版本和RelWithDebInfo版本,但是连接的时候应该怎么去连接呢?

说道这里:我总结出我对编译原理不懂啊,编译器怎么编译的?连接器是怎么连接的?我都说不出来,虽然设置好CMakeLists.txt后,那些都不是问题啦。你可曾想过,当你了解编译原理之后,写CMakeLis

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值