首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

当Gcc编译具有多个版本的boost的Boost :: regex时存在未定义的引用

问题:当Gcc编译具有多个版本的boost的Boost :: regex时存在未定义的引用。

答案

这个问题可能是由于编译器(如Gcc)编译时遇到了未定义的引用。在Boost库中,boost::regex类通常用于正则表达式匹配。未定义的引用可能是由于版本不匹配或库的编译方式导致的。

要解决这个问题,您可以尝试以下方法:

  1. 确保使用的Boost版本相同:确保您的所有应用程序和库都使用相同的Boost版本。对于Boost的boost::regex,您需要使用与您的项目相同的Boost版本。
  2. 检查库的编译设置:确保您的库的编译设置正确。例如,在Linux上使用Gcc编译时,确保添加了-lboost_regex选项。
  3. 检查编译器和连接器:确保您的编译器和连接器没有问题。在编译时,使用-v选项可以输出有关编译器和连接器的详细信息,以帮助您识别问题。
  4. 检查未定义引用的来源:使用lddnm命令检查未定义引用的来源,以确定它们是否由特定的库或应用程序生成。
  5. 更新工具和库:确保您的构建工具(如CMake)和库是最新的。
  6. 考虑重新编译整个项目:有时,重新编译整个项目可以解决编译器或库引起的问题。

为了更详细地了解这个问题,您可以查阅相关日志、输出和错误消息。这些信息应该能让您更清楚地了解编译过程中出现的问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

ubuntu gcc编译对’xxxx’未定义引用问题

http://www.cnblogs.com/oloroso/p/4688426.html gcc编译对’xxxx’未定义引用问题 原因 解决办法 gcc 依赖顺序问题 在使用gcc编译时候有时候会碰到这样问题...dso.o:在函数‘dso_load(char const*, char const*)’中: dso.cpp:(.text+0x3c):对‘dlopen’未定义引用 dso.cpp:(.text+0x4c...):对‘dlsym’未定义引用 dso.cpp:(.text+0xb5):对‘dlerror’未定义引用 dso.cpp:(.text+0x13e):对‘dlclose’未定义引用 原因 出现这种情况原因...但是看上面编译时候是有添加-ldl选项,那么为什么不行呢? gcc 依赖顺序问题 这个主要原因是gcc编译时候,各个文件依赖顺序问题。...在gcc编译时候,如果文件a依赖于文件b,那么编译时候必须把a放前面,b放后面。

7.8K20

Boost

一开始用sudo apt-get install libboost-dev倒是能解决代码中头文件引用存在问题,但是编译不成功,总是会出现什么未定义引用错误,之后remove掉,重新下载源码编译还是会存在一些问题.../bootstrap.sh --with-libraries=all --with-toolset=gcc # --with-libraries指定编译哪些boost库,all把全部选上,以免出了啥子差错...# --with-toolset指定编译使用哪种编译器,Linux使用gcc,当然默认就有 设置完成以后,开始编译编译命令..../b2,编译过程有点慢,编译结束后大致涨这个模样。 ? 接着就是安装boost,安装命令....最后运行一下ldconfig, 该命令通常在系统启动时运行,而当用户安装了一个新动态链接库,就需要手工运行这个命令。

1.9K10

常见错误集合解决方案(一)

使用VS2013版本引用外部lib进行编译时候提示: 错误25 error LNK2038: 检测到“_ITERATOR_DEBUG_LEVEL”不匹配项: 值“0”不匹配值“2”(jrtplibSend.obj...产生这个问题原因是当前工程是Debug版本,而引用库文件Release版本,只需要把当前Debug模式改成Release模式就可以了,或者打开解决方案--》属性--》链接器--》输入--》附加依赖项中引用...这类问题在引用文件要注意版本匹配 借用他人情况分析我遇到error LNK2038: 检测到“_ITERATOR_DEBUG_LEVEL”不匹配项: 值“0”不匹配值“2” 错误第二个原因...第一个链接说明,当选择什么样子运行时库,程序在编译时候,就会去调用相应编译时期指定版本,比如s代表是运行时静态库,gd代表是调试模式,出现无法打开上面的情况下,说明放在指定目录下boost...= 64 解释:=64表示编译是64位boost =32表示编译是32位boost 3、然后执行后就会得到下面的截图: ?

1.6K20

boost编译

库和release库等全部版本,但是到了1.35.0默认选择仅仅编译release 版本库,这样一来在开发时候就不能进行必要调试了,为了能够使其编译全部版本 需要在bjam命令行参数中添加一个...编译具有ICU支持boost库 首先我们必须编译ICU库才能够编译boost库,在准备好console窗口中输入: bjam -sICU_PATH=d:/ICU --without-python...使用boost库不需要在工程设置中显式指定库名字,而是由boost自身来完成这个设定。由于boost库跨平台并且支持多个编译环境,因此这个被链接库文件文件名是根据当前编译配置动态生成。...boost_regex是库基本名称,vc80是编译环境,mt表示这是一个多线程库,gd表示包含调试信息,最后1_34_1是版本号。...原因是boost源代码注释中有很多非low ASCII字符,都是人名和版权注释。在编译boost可以不管,但是在编译包含了boost头文件项目却很烦人。

20230

VS编译BOOST,bjam参数详解

编译 release 版本 regex 动态库,包括头文件和库文件 bjam --toolset=msvc-9.0 --prefix=D:\05_Computer\04_3rdPatry\02Boost...= 存放编译后库文件路径,默认是stage --build-type=complete 编译所有版本,不然只会编译一小部分版本(相当于: variant=release,threading...,如输入--with-regex就只编译regex库了 --show-libraries 显示需要编译库名称 【四、Bjam 生成文件分析】 (1)生成 Release 版本,多线程,动态链接...:没有这种配置 【总结】: (1) 编译成功后,Bjam 都会给你生成一对一样导入库文件或者静态库文件(如下), 唯一不同是两个文件名称一个在后面加上了boost版本信息, 为了让用户知道使用boost..., 所以 threading= multi, 这样剩下3个选项组成编译配置就是上面所罗列, 其中静态链接C++标准库boost动态库这种配置也不存在, 所以就只有4种情况。

45710

编译boost库工程

我仔细在C:\boost_1_64_0目录下搜索了一下,根本就没有libboost_regex-vc140-mt-sgd-1_64.lib这个库文件,那咋办,找教程编译编译boost库工程是一个叫...toolset:指定编译器,可选的如borland、gcc、msvc(VC6)、msvc-9.0(VS2008)等。至于VS版本可以参看Visual Stdio平台工具集以及配置。...还有wave、graph、math、regex、test、program_options、serialization、signals这几个库编出静态lib都非常大,所以不需要也可以without掉。...查看boost包含库命令是bjam --show-libraries。 stagedir/prefix:stage使用stagedir,install使用prefix,表示编译生成文件路径。...debug/release:编译debug/release版本。一般都是程序debug版本对应库debug版本,所以两个都编译编译日志,由于配置参数原因只生成了静态lib,没有dll

21030

xmake v2.5.9 发布,改进 C++20 模块,并支持 Nim, Keil MDK 和 Unity Build

而通过 Unity Build,我们通过将多个 cpp 文件组合成一个来加速项目的编译,其主要好处是减少了解析和编译包含在多个源文件中头文件内容重复工作,头文件内容通常占预处理后源文件中大部分代码...Unity 构建还通过减少编译链创建和处理目标文件数量来减轻由于拥有大量小源文件而导致开销,并允许跨形成统一构建任务文件进行过程间分析和优化(类似于效果链接优化)。...尽管切换了 Lua 运行时,但是对于用户端,完全是无感知,并且完全兼容现有工程配置,因为 xmake 原本就对暴露 api 提供了一层封装, 对于 lua 版本之间存在兼容性问题接口,例如 setfenv...如果用户额外安装了 gcc-11, gcc-10 等特定版本 gcc 工具链,在本地 gcc 程序命名可能是 /usr/bin/gcc-11。...所以,xmake 也提供了更加快捷切换方式: $ xmake f --toolchain=gcc-11 -c $ xmake 只需要指定 gcc-11 对应版本名,就可以快速切换整个 gcc 工具链

2.5K10

bjam 参数

下表是对Regex编译文件名: 文件名 含义 编译使用该库程序时应使用编译选项 libboost_regex-vc90-mt-sgd-1_38.lib 静态库,多线程,调试版本 使用静态调试版本...-mt-gd-1_38.lib 导入库(boost_regex-vc90-mt-gd-1_38.dll),多线程,调试版本 boost_regex-vc90-mt-1_38.lib 导入库(boost_regex-vc90...××××’ conflicts with use of other libs; use /NODEFAULTLIB:library 原因是,编译,cl.exe(也就是VC编译器)会根据上述编译选项在编译...链接器处理该obj文件,会从文件中取出该defaultlib文件名,将其放在命令行库列表最后以供使用。...链接器处理静态库,也会将涉及到obj文件中defaultlib放在命令行库列表最后。

19920

C++字符串处理小结

但是在实际工作使用中,很多时候,总是会感觉,C++对字符串处理支持实在是弱爆了……感觉这个具有百余个方法“巨”类用起来总是捉襟见肘。...Boost.Regex已经被纳入到C++11标准之中,但是我们常用g++4.8.x(比如ubuntu14.04默认g++版本就是4.8.x,公司g++版本也是4.8.x)C++标准库还没有实现正则表达式...实际上,g++4.8.x已经定义了标准库正则表达式类型和接口,但是只是占了个坑,并没有真正实现……结果可以编译通过,但是运行一直抛出异常。gcc4.9才真正实现了标准库正则表达式。...系列算法,由于其需要与其他容器通用,其删除比较函数只能是一个字符之间比较(std::string中一个字符相当于vector中一个元素)。...boost::regex rgx("(\\w+)\\s(\\w+)"); string s("abcd efgh"); // boost::regex_match() 字符串和正则表达式

3K80

Signals-The Boost C++ Libraries

\n"; }; f(); } 在示例67.2中,调用f,也会执行lambda函数。...无论何时触发信号,函数都会按照它们与connect()关联顺序执行。 还可以在connect()重载版本帮助下显式定义该顺序,该版本期望将int类型值作为附加参数(示例67.4)。...默认情况下,仅返回所有关联函数最后一个返回值。 请注意,s()不会直接返回最后一个调用函数结果。返回类型为boost::optional对象,取消引用后将返回数字2。...该操作符会被两个迭代器自动调用,这两个迭代器用于访问与特定信号关联功能。取消迭代器引用时,将调用函数,并且它们返回值在组合器中变得可用。...boost::signals2::signal期望组合器定义一个称为result_type类型,该类型表示operato()返回类型。由于标准算法未定义此类型,因此编译器将报告错误。

1.2K40

4.1 C++ Boost 字符串处理库

(RSS)下载页面,并点击Prebuilt windows binaries则可打开二进制预编译版本对应页面。...此时读者可根据自己编译版本选择适合于自己库,此处笔者使用是Visual Studio 2013编译器,所以此处选中是1.82.0目录下boost_1_82_0-msvc-12.0-32.exe...,首先读者需要在VS中引入boost_1_82_0目录,并在类库选项上引入lib32-msvc-12.0即可,如下图所示则是正常引用配置参数; 在C语言早期版本中,对于字符串和文本处理一直都是最为薄弱...细心读者应该还可以观察到to_upper_copy在其后方存在一个COPY字符,出现拷贝字符则预示着需要对原始字符串进行拷贝而不是直接更改原始字符串意思。...可以使用多个不同构造函数来指定不同分隔符,其中char_separator和boost_regex_separator分别使用字符和正则表达式作为分隔符。

27730

4.1 C++ Boost 字符串处理库

(RSS)下载页面,并点击Prebuilt windows binaries则可打开二进制预编译版本对应页面。...图片此时读者可根据自己编译版本选择适合于自己库,此处笔者使用是Visual Studio 2013编译器,所以此处选中是1.82.0目录下boost_1_82_0-msvc-12.0-32....,首先读者需要在VS中引入boost_1_82_0目录,并在类库选项上引入lib32-msvc-12.0即可,如下图所示则是正常引用配置参数;图片在C语言早期版本中,对于字符串和文本处理一直都是最为薄弱...细心读者应该还可以观察到to_upper_copy在其后方存在一个COPY字符,出现拷贝字符则预示着需要对原始字符串进行拷贝而不是直接更改原始字符串意思。...可以使用多个不同构造函数来指定不同分隔符,其中char_separator和boost_regex_separator分别使用字符和正则表达式作为分隔符。

38330

linux中使用boost.python调用c++动态库方法

举一个例子,在c语言中,有一个函数 int add(int a,int b); 如果使用gcc编译器,那么编译生成名字就叫 add,但是如果使用 g++编译器,可能编译生成名字就叫类似于ABaddCD...试想一下,如果使用gcc编译器,那么都叫add,就无法区分哪个函数了,所以无法重载。...,找到 libpthread.so 链接版本号,加上 .0 版本号,则不会报错。...配置环境,我使用命令是:yum install boost*, yum install python-devel,参考这两篇文章实现boost,基本上都能通过,遇到问题,里面也有。...补充:采用boost.python方式调用c++动态库时候,我无法处理引用类型,比如 string& recv_answer 用来接收返回结果,被识别为 string{lvalue},而我python

2.2K71

linux中使用boost.python调用c++动态库办法

举一个例子,在c语言中,有一个函数 int add(int a,int b); 如果使用gcc编译器,那么编译生成名字就叫 add,但是如果使用 g++编译器,可能编译生成名字就叫类似于ABaddCD...试想一下,如果使用gcc编译器,那么都叫add,就无法区分哪个函数了,所以无法重载。...,找到 libpthread.so 链接版本号,加上 .0 版本号,则不会报错。...配置环境,我使用命令是:yum install boost*, yum install python-devel,参考这两篇文章实现boost,基本上都能通过,遇到问题,里面也有。...补充:采用boost.python方式调用c++动态库时候,我无法处理引用类型,比如 string& recv_answer 用来接收返回结果,被识别为 string{lvalue},而我python

2.2K30

std和boostfunction与bind实现剖析

这里在list实现上boost和std有一点小小差异。由于boost要兼容老版本编译器,而老版本编译器是不支持动态模板参数。...这里面 boost::arg到boost::arg分别是占位符。如果是占位符,就会返回参数列表(也就是新list)内对应位置数据。否则直接把传入数据引用返回去了。...使用过boostbind和function童鞋应该看到过它里面的一个注意事项,就是如果bind函数参数是引用类型,应该在执行bind函数使用引用包装(boost::ref或者std::ref)。...至于问题3中区分成员函数和虚函数部分,可以参照我之前一篇分享《VC和GCC成员函数指针实现研究》。 至于function复制如何发生?在有了functor结构之后就简单多了。...就是对于boost引用包装,boost::functionfunctor部分采用了obj_ref结构来存储;但是对于标准库std引用包装,却是视为了小对象仿函数来处理。其实是没什么太大影响啦。

1.8K10

std和boostfunction与bind实现剖析

这里在list实现上boost和std有一点小小差异。由于boost要兼容老版本编译器,而老版本编译器是不支持动态模板参数。...否则直接把传入数据引用返回去了。而这里传入数据都是由原保存数据list内容,也就是执行bind函数传入东东。 这就用非常简洁地实现了任意控制占位符和预先传入参数。...使用过boostbind和function童鞋应该看到过它里面的一个注意事项,就是如果bind函数参数是引用类型,应该在执行bind函数使用引用包装(boost::ref或者std::ref)。...以上,就是问题1和问题3解决方案。至于问题3中区分成员函数和虚函数部分,可以参照我之前一篇分享《VC和GCC成员函数指针实现研究》。 至于function复制如何发生?...就是对于boost引用包装,boost::functionfunctor部分采用了obj_ref结构来存储;但是对于标准库std引用包装,却是视为了小对象仿函数来处理。其实是没什么太大影响啦。

1K30

C++服务编译耗时优化原理及实践

O2:是比O1更高级选项,进行更多优化。GCC将执行几乎所有的不包含时间和空间折中优化。设置O2选项编译器并不进行循环展开以及函数内联优化。...,通过编译展开后文件大小和内容,通过预编译展开分析能看到文件展开后文件有40多万行,发现有大量Boost引用及头文件引用造成展开文件比较大,影响到编译耗时。...需要注意是,Make本身也有一定缓存功能,目标文件已编译(且依赖无变化),若源文件时间戳无变化也不会再次编译;但CCache是按文件内容做缓存,且同一机器多个项目可以共享缓存,因此适用面更大。...Module编译 如果你项目是用C++ 20进行开发,那么恭喜你,Module编译也是一个优化编译速度方案,C++20之前版本会把每一个cpp当做一个编译单元处理,会存在引入头文件被多次解析编译问题...替换BoostBoost是一个广泛使用基础库,涵盖了大量常用函数,十分方便、好用,然而也存在一些不足之处。

1.8K20
领券