C++ 使用“时增压链路错误”--布局=系统“;关于VS2005
我是boost新手,我想尝试一下.dll的一些实际部署场景,因此我使用以下命令编译/安装库:C++ 使用“时增压链路错误”--布局=系统“;关于VS2005,c++,boost,linker,C++,Boost,Linker,我是boost新手,我想尝试一下.dll的一些实际部署场景,因此我使用以下命令编译/安装库: .\bjam install --layout=system variant=debug runtime-link=shared link=shared --with-date_time --with-thread --with-regex --with-filesystem --includedir=<my include directory> --libdir=<my bin di
.\bjam install --layout=system variant=debug runtime-link=shared link=shared
--with-date_time --with-thread --with-regex --with-filesystem
--includedir=<my include directory> --libdir=<my bin directory> > installlog.txt
我确信.lib和.dll都在那个目录中,并且按照我的要求命名(例如:boost_regex.lib等,正如--layout=系统所说的,都是未版本的)。那么,它为什么要寻找它的版本类型呢?我怎样才能让它找到未版本的图书馆类型呢
我尝试了更多“正常”选项,例如:
.\bjam stage --build-type=complete --with-date_time --with-thread --with-filesystem --with-regex > mybuildlog.txt
这很好。我确保我的编译器看到了“stage\lib”目录,并且它编译并运行良好,除了让环境查看正确的lib目录外,没有其他任何问题。但当我拿走那些“测试”目录,并想使用其他目录(未版本)时,它失败了
我在XP上使用VS2005。有什么想法吗?< /P> < P>快速回答,因为我在家里不能访问Visual C++。
我相信你和Visual C++编译器上的“自动链接”发生了冲突。
解决方案是禁用“自动链接”(请参阅您的文档:快速谷歌搜索显示宏“BOOST_ALL_NO_LIB”以禁用所有BOOST库的自动链接),然后将您的项目明确链接到正确的库
我将尽快更新此答案。我在构建时也遇到了这个奇怪的(对我来说)链接器错误 使用VS2005在Windows Server 2003上启动。我正在使用类似的
bjam
命令行选项与OP相同,但没有--layout=system
选项,因为我不介意其中的版本信息(还没有)
下面的措辞的执行摘要是:如果你看到
链接:致命错误LNK1104:无法打开文件
“libboost_regex-vc80-mt-gd-1_42.lib”
,然后需要指定
与下游应用程序构建中的-D
编译行选项相同
Boost的构建在构建Boost正则表达式库时进行。这个
文件中未说明AFAICT(截至2010年3月23日)
详细信息:调试此问题时我发现非常有用的内容有:
-d+2
选项来bjam
。这倒是一个错误
关于命令行选项到底是什么的大量日志记录
正在使用中。这就是我如何确定-DBOOST\u ALL\u NO\u LIB=1
和-DBOOST\u REGEX\u DYN\u LINK=1
正在
cl.exe
在构建Boost正则表达式库时编译行-D
标志
(使用VS2005同样接受的-D
或/D
选项
当您在使用该文件的应用程序中编译.cpp
文件时
boostlibrary(对于boostregex是真的,我猜这是真的
对于其他人,我尚未确认)。这就是为什么你会看到
链接器失败:LINK:致命错误LNK1104:无法打开文件
“libboost_regex-vc80-mt-gd-1_42.lib”
,因为没有
-DBOOST\u ALL\u NO\u LIB=1
和-DBOOST\u REGEX\u DYN\u LINK=1
选项
当编译器解析你的.cpp
文件和#包括
的Boost头文件,后者是
#包括
的自动链接标题,后者由
默认使用自动链接逻辑,该逻辑是编译器杂注
告诉链接器要使用哪个库。猜猜是哪一个
自动链接逻辑在默认情况下会选择什么?答:静电
格式为libbla.lib
且不为
bla.lib
这是您期望的导入库。这
基于pragma的链接器指令逻辑是我一直追求的目标
花了3个小时试图找出我在我的链接器上做错了什么
行,当它处于自动链接中的C预处理器控制下时
这样做的逻辑这是有效的,尽管现在我得到了一个共享的\u ptr错误(BOOST\u断言对于空指针是失败的)。我甚至一步一步地浏览了代码,不明白为什么有些东西没有初始化。可能是因为我编译了没有这个标志的库,并试图用它编译应用程序,但这仍然没有多大意义。无论如何,感谢您的帮助。实际上,我没有使用命令行选项,而是在boost\config中更改了user.hpp文件,因为这会在编译时影响bjam和您自己的应用程序。
fatal error LNK1104: cannot open file 'libboost_regex-vc80-mt-1_42.lib'
.\bjam stage --build-type=complete --with-date_time --with-thread --with-filesystem --with-regex > mybuildlog.txt