首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用库libsumo、libtraci、未定义的libtraci::C++:init()链接错误

使用库libsumo、libtraci、未定义的libtraci::C++:init()链接错误
EN

Stack Overflow用户
提问于 2022-05-18 12:13:17
回答 2查看 115关注 0票数 0

我有一个关于在Windows中正确链接库libsumocpp和libtracicpp的问题。

我试图使用C++中的libsumo连接到相扑服务器,并有以下代码:

代码语言:javascript
运行
复制
#include <iostream>
#include <libsumo/libtraci.h>

using namespace libtraci;

int main(int argc, char* argv[]) {

Simulation::init();
//Simulation::start({"sumo", "-c", "Network_02.sumocfg"});
Simulation::setOrder(2);
//Simulation::init();
//Simulation::setOrder(2);

for (int i=0; i<50; i++)
{
    Simulation::step();
}
Simulation::close();
return 0;
}

上面的代码基于以下C++代码片段((这个github哨所),它试图连接到sumo服务器):

代码语言:javascript
运行
复制
I'm trying to connect to the Sumo simulation from multiple traci clients using libtraci. 
This is how I'm starting the simulation:

sumo --remote-port 4001 --num-clients 2 -c config_file.sumocfg

After starting the simulation I'm trying to connect from two traci client using   the 
   code below:

#include <libsumo/libtraci.h>

using namespace libtraci;
int main () {
Simulation::init(4001,21,"localhost");
Simulation::setOrder(3);
for (int i = 0; i < 500000; i++) {
Simulation::step();
}
Simulation::close();
return 0;
}

如前所述,我的代码就是上面的代码。在构建、编译和链接为“libsumo/Simulation”下列出的类“模拟”函数时,我会遇到以下错误。h似乎没有正确链接:

代码语言:javascript
运行
复制
c:/mingw64/bin/../ld.exe: src\Test.o:C:\Users\Lukas\eclipse-ws\Test\Debug/../src/Test.cpp:28: 
undefined reference to `libtraci::Simulation::init(int, int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, _iobuf*)'
c:/mingw64/bin/../bin/ld.exe: src\Test.o: in function `main':
C:\Users\Lukas\eclipse-ws\Test\Debug/../src/Test.cpp:30: undefined reference to `libtraci::Simulation::setOrder(int)'
c:/mingw64/bin/../ld.exe: C:\...\Test.cpp:36: undefined reference to `libtraci::Simulation::step(double)'
c:/mingw64/bin/../ C:.../src/Test.cpp:38: undefined reference to `libtraci::Simulation::close(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
collect2.exe: error: ld returned 1 exit status

我想这是一个链接错误。我在Properties -l C/C++ Build -> Settings -> MinGW C++链接库中提供了指向库“libsudempp.lib/dll”和"libtracicpp.lib/dll“的路径(-L”C:\User\Lukas\eclipse\SUMO\bin“)。但是,它不起作用。有人知道我的设置有什么问题吗?

向你问好,卢卡斯

EN

回答 2

Stack Overflow用户

发布于 2022-05-18 19:03:48

gcc/binutils使用扩展.a (甚至是共享库的.dll.a )代替.lib (由MSVC使用)作为库导入文件。

因此,要链接,您应该将lib<name>.a (静态)或lib<name>.dll.a (共享)文件放在指向-L的文件夹中,然后使用-l<name>与库进行链接。

gcc (不确定ld)足够聪明,可以知道.dll本身是一个共享库,因此您甚至可以指定.dll文件的路径,并且它会知道您想要链接到该共享库。

票数 0
EN

Stack Overflow用户

发布于 2022-05-19 03:11:47

undefined reference to libtraci::Simulation::init(int, int, std::__cxx11::basic_string<...

此错误表明您正在使用-std=c++11标志编译代码。

但是libtraci可能不是用这个标志构建的,如果不是,那么您就会得到所得到的错误。

运行nm -C libtracicpp.lib | grep 'libtraci::Simulation::init'并查看是否有任何内容出现,以及被蒙蔽的符号中是否包含::__cxx11::

如果名称中没有__cxx11,则需要使用-std=c++11重新构建libtracicpp,或者在没有标记的情况下构建代码(您的示例似乎没有使用任何C++11特性)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72288974

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档