问一下关于 C/C++的头文件和库的问题

2018-11-26 10:53:59 +08:00
 xiaottt

系统默认有一套 boost 库,但是比较的老旧;然后我自己本地也编译了一套 boost 库,稍微新一些。
新库和老库不兼容,但是有多套系统使用这个环境,所以新老都必须保留。

请问有什么方法,让 g++编译的时候默认选择老库,但是通过某些方式可以优先选择新库的形式来编译呢?这里主要包括头文件和库文件,连接的话使用静态链接。

2314 次点击
所在节点    程序员
13 条回复
shylockhg
2018-11-26 10:55:23 +08:00
没听懂
shylockhg
2018-11-26 10:56:25 +08:00
哦,可以改.a 的软连接。。
bp0
2018-11-26 11:08:22 +08:00
用来做交叉编译的 g++是有--sysroot 选项的,这个选项可以指定头文件和库文件的路径。

我这边的 mingw 中的 g++也有类似选项,楼主可以自己--help 看一下自己的 g++是否支持。
wutiantong
2018-11-26 11:09:15 +08:00
无论是写 makefile 还是写 cmake 都能搞定这个的呀
shylockhg
2018-11-26 11:14:14 +08:00
也可以用-l:libname.version
bp0
2018-11-26 11:29:02 +08:00
补充一下,如果头文件相同,可以在编译的时候指定-L 选项。这个选项用来指定库文件的路径。
xiaottt
2018-11-26 11:35:05 +08:00
@bp0

Directories named by -I are searched before the standard system include directories.


ENVIRONMENT

Note that you can also specify places to search using options such as -B, -I and -L. These take precedence over places specified using environment variables, which in turn take
precedence over those specified by the configuration of GCC.


看了一下文档,好像是有这么一说。
我来试试看
coderluan
2018-11-26 11:39:11 +08:00
正经的是写 makefile,不正经的话可以用 shell 和环境变量解决。
zbcwilliam
2018-11-26 14:13:29 +08:00
makefile
zynlp
2018-11-26 14:30:06 +08:00
两个不同版本库,同时存在,要么放不同目录,要么改名字,
如果头文件都不一样,代码里就用宏去控制 include 的文件
make 的时候指定要链接的库

ps:远离 boost
aa514758835
2018-11-26 15:56:08 +08:00
linux 环境变量。windows 的话 在 vs 里面设置
xiaottt
2018-11-26 17:53:31 +08:00
将目录和库路径包含在 CMake 的文件中,是会优先使用指定路径的头文件和库的,这里已经没问题了。


@zynlp
xiaottt
2018-11-26 17:53:54 +08:00
@zynlp

为啥要远离 boost ???

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/511517

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX