首页
学习
活动
专区
工具
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.9K20
  • 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, 该命令通常在系统启动时运行,而当用户安装了一个新动态链接库,就需要手工运行这个命令。

    2K10

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

    使用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头文件项目却很烦人。

    24230

    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种情况。

    49710

    编译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

    22230

    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

    【Linux】rocketmq-client-cpp 2.0.1 编译方法(基于 ARM 64 架构)

    如果您有其他想要了解,欢迎私信联系我~ 背景介绍 近期,笔者同事在进行业务容器适配 ARM 64 工作,但是遇到无法安装 rocketmq-client-cpp 2.0.1 动态库问题,最终笔者帮忙解决了该问题...该问题原因是 X86 架构下可以直接使用官方 yum 源进行安装,但是 ARM 64 架构下官方并未提供 yum 源。...本文基于 rocketmq-client-cpp 2.0.1 版本,通过源码编译方式生成 .so 动态库文件,以下为完整过程。...cxxflags=-fPIC --with-atomic --with-thread --with-system --with-chrono --with-date_time --with-log --with-regex...cxxflags=-fPIC --with-atomic --with-thread --with-system --with-chrono --with-date_time --with-log --with-regex

    17210

    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放在命令行库列表最后。

    21620

    实现一个strong_rc_ptr(非线程安全版本std::shared_ptr)

    每次变更索引都是重新入删除和插入一个 std::shared_ptr 。 std::shared_ptr 底层实现是使用 std::atomic 来维护了引用计数。...其实GCC STL本身自带费线程安全内部版本,可以通过使用 template using strong_rc_ptr = std::__shared_ptr<T, std:...然而我们这里考虑到跨编译器跨平台,所以自己实现了一个。 实现 基础功能 引用计数型智能指针基本原理比较简单。就是有一个存储区去存放引用计数。计数清零后释放。...这个检测目前新版本编译器和STL实现大多数采用 std::void_t 转换detection idiom来实现。...未来规划 之前实现 libcopp 对C++20协程支持时候也有几处内部生命周期引用地方是计划中后续改成无Cache Miss版本,后续看有空也改造一下吧。也是能减少一些不必要内部开销。

    9110

    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.3K40

    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分别使用字符和正则表达式作为分隔符。

    30130

    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分别使用字符和正则表达式作为分隔符。

    42730

    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

    Boost C++ 库 | 事件处理

    Boost.Signals 所实现模式被命名为 '信号至插槽' (signal to slot),它基于以下概念:对应信号被发出,相关联插槽即被执行。... f 被调用时,就会相应地执行 func()。Boost.Function 仅限于这种情形下适用,而 Boost.Signals 则提供了多得多方式,如关联多个函数至单个特定信号,示例如下。)...该信号被触发,这些函数被按照之前用 connect() 进行关联顺序来执行。.../build/Desktop_Qt_6_5_3_GCC_64bit-Debug/boost... 2>>>func1() 和 func2() 都具有 int 类型返回值。 ...由于在标准 C++ 算法中缺少这个类型,所以在编译时会产生一个相应错误。除了对返回值进行分析以外,合成器也可以保存它们。(这个例子把所有返回值保存在一个 vector 中,再由 s() 返回。)

    8410
    领券