(.bss+0x0):代理的多重定义
(.bss+0x0): multiple definition of Proxies
我有这段代码用于自动化机器人。它使用了一些来自Player的代理类,Player是一款用于编程机器人的开源软件。我使用以下命令编译了两个cpp文件:
g++-c-Wall navigation.cpp`pkg配置--cflags playerc++`pkg配置--libs playerc++`和g++-c-Wall autonavigation.cpp`pkg配置--cflags playerc++`pkg配置--libs playerc++`然后我链接了对象文件(这就是出现问题的地方):g++-o自动导航.o自动导航.o`pkg配置--cflags playerc++`pkg配置--libs playerc++`
代码在这里:
erratic@erratic-desktop:~/桌面/autonav$g++-o自动导航。oautonavigation.o`pkg配置--cflags playerc++`pkg配置--libs playerc++`autonavigation.o:(.bss+0x0):"gHostname"的多重定义navigation.o:(.bss+0x0):首先在此处定义autonavigation.o:(.data+0x0):"gPort"的多重定义navigation.o:(.data+0x0):首先在此处定义autonavigation.o:(.bss+0x4):"gIndex"的多重定义navigation.o:(.bss+0x4):首先在此处定义autonavigation.o:(.bss+0x8):"gDebug"的多重定义navigation.o:(.bss+0x8):首先在此处定义autonavigation.o:(.data+0x4):"gFrequency"的多重定义navigation.o:(.data+0x4):首先在此处定义autonavigation.o:(.data+0x8):"gDataMode"的多重定义navigation.o:(.data+0x8):首先在此处定义autonavigation.o:(.bss+0xc):"gUseLaser"的多重定义navigation.o:(.bss+0xc):首先在此处定义autonavigation.o:在函数"parse_args(int,char**)"中:autonavigation.cpp:(.text+0x0):"parse_args(int,char**)"的多重定义navigation.o:navigation.cpp:(.text+0x0):首先在此处定义autonavigation.o:在函数"print_usage(int,char**)"中:autonavigation.cpp:(.text+0x101):"print_usage(int,char**)"的多重定义navigation.o:navigation.cpp:(.text+0x101):在此处首次定义collect2:ld返回1退出状态
来自注释的源代码:
//navigation.h
#include <libplayerc++/playerc++.h>
#include <stdio.h>
#include <time.h>
#include "args.h"
#define PI 3.14159
using namespace std;
using namespace PlayerCc;
class navigation
{
public:
navigation();
void autoNavigate(PlayerClient &, LaserProxy &, Position2dProxy &, PtzProxy &, IrProxy &, SonarProxy &);
private:
void wallFollow(LaserProxy &, Position2dProxy &);
void obstacleAvoid(IrProxy &, SonarProxy &, PlayerClient &, Position2dProxy &);
};
autonavigation.cpp
:的来源
#include "navigation.h"
int main(int argc, char *argv[])
{
PlayerClient robot("localhost");
LaserProxy lp(&robot,0);
Position2dProxy pp(&robot,0);
PtzProxy ptp (&robot,0);
IrProxy ir(&robot,0);
SonarProxy sp(&robot, gIndex);
navigation nav;
nav.autoNavigate(robot, lp, pp, ptp, ir, sp);
}
在没有看到您的代码的情况下,我们只能猜测,但我的猜测是,您在两个源文件中都包含的头文件中定义这些变量。
您应该声明变量,并使用extern
告诉编译器变量是在其他地方定义的。然后在一个源文件中定义变量(即与头文件中的声明相同,但没有extern
关键字)。
例如,假设我有一个变量hostname
,我想在多个源文件中使用它,然后我在一个头文件中声明extern
,包括在所有需要该变量的源文件中:
extern char hostname[32];
然后在一个源文件中,我定义了变量:
char hostname[32];
相关文章:
- 在提升multi_index容器中,是否定义了"default index"?
- #定义c-预处理器常量..我做错了什么
- 用C++中的一个变量定义一个常量
- 部分定义/别名模板模板参数
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 代理对象的常量正确性
- #为""定义宏;静态";针对不同的上下文
- 如何确保C++函数在定义之前声明(如override关键字)
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 当类在C++中定义时,有什么方法可以"register"类吗?
- 在命名空间中定义函数还是限定函数
- 此代码是否违反一个定义规则
- 编译C++时未定义的引用
- 不同翻译单元中不可重载的非内联函数定义
- 为什么在定义函数之前先声明它
- 为成员函数定义代理,该代理将成员函数指针作为模板参数
- 如何从设备代理定义自定义片段
- 根据 boost::iterator_facade 定义基于代理的输出迭代器
- (.bss+0x0):代理的多重定义
- 自定义代理绘制在编辑时保持不变