当前位置:  技术问答>linux和unix

编译问题。myslq++的

    来源: 互联网  发布时间:2017-03-03

    本文导语:  错误代码: [root@locahost test]# make -f makefile_new  g++ -fPIC -I./include/ -g -c test.cpp g++ -fPIC -I./include/ -g -c DbManager.cpp g++ -shared -fPIC -I./include/ -o libdbmanager.so test.o DbManager.o DbManager.o:(.data.rel.local+0x14): multiple defini...

错误代码:
[root@locahost test]# make -f makefile_new 
g++ -fPIC -I./include/ -g -c test.cpp
g++ -fPIC -I./include/ -g -c DbManager.cpp
g++ -shared -fPIC -I./include/ -o libdbmanager.so test.o DbManager.o
DbManager.o:(.data.rel.local+0x14): multiple definition of `db_user::table_'
test.o:(.data.rel.local+0x14): first defined here
DbManager.o:(.data.rel.local+0x68): multiple definition of `db_cpl::table_'
test.o:(.data.rel.local+0x68): first defined here
DbManager.o:(.data.rel.local+0x88): multiple definition of `db_kdm::table_'
test.o:(.data.rel.local+0x88): first defined here
DbManager.o:(.data.rel.local+0xc0): multiple definition of `db_monitor_errorinfo::table_'
test.o:(.data.rel.local+0xc0): first defined here
DbManager.o:(.data.rel.local+0xd8): multiple definition of `db_pkl::table_'
test.o:(.data.rel.local+0xd8): first defined here
DbManager.o:(.data.rel.local+0xf0): multiple definition of `db_spl::table_'
test.o:(.data.rel.local+0xf0): first defined here
DbManager.o:(.data.rel.local+0x104): multiple definition of `db_smuser::table_'
test.o:(.data.rel.local+0x104): first defined here
DbManager.o:(.data.rel.local+0x120): multiple definition of `db_showlog::table_'
test.o:(.data.rel.local+0x120): first defined here
DbManager.o:(.data.rel.local+0x140): multiple definition of `db_showtime::table_'
test.o:(.data.rel.local+0x140): first defined here
DbManager.o:(.data.rel.local+0x150): multiple definition of `db_systemfilelog::table_'
test.o:(.data.rel.local+0x150): first defined here
DbManager.o:(.data.rel.local+0x190): multiple definition of `db_transferlog::table_'
test.o:(.data.rel.local+0x190): first defined here
DbManager.o:(.data.rel.local+0x1a4): multiple definition of `db_urlhistory::table_'
test.o:(.data.rel.local+0x1a4): first defined here
DbManager.o:(.data.rel.local+0x1b0): multiple definition of `db_errordesc::table_'
test.o:(.data.rel.local+0x1b0): first defined here
DbManager.o:(.data.rel.local+0x1c4): multiple definition of `db_datadict::table_'
test.o:(.data.rel.local+0x1c4): first defined here
DbManager.o:(.data.rel.local+0x1d4): multiple definition of `db_assets_connection::table_'
test.o:(.data.rel.local+0x1d4): first defined here
DbManager.o:(.data.rel.local+0x1ec): multiple definition of `db_reel_connection::table_'
test.o:(.data.rel.local+0x1ec): first defined here
DbManager.o:(.data.rel.local+0x1fc): multiple definition of `db_secfilelog::table_'
test.o:(.data.rel.local+0x1fc): first defined here
DbManager.o:(.data.rel.local+0x0): multiple definition of `db_user::names'
test.o:(.data.rel.local+0x0): first defined here
DbManager.o:(.data.rel.local+0x6c): multiple definition of `db_kdm::names'
test.o:(.data.rel.local+0x6c): first defined here
DbManager.o:(.data.rel.local+0xc4): multiple definition of `db_pkl::names'
test.o:(.data.rel.local+0xc4): first defined here
DbManager.o:(.data.rel.local+0x144): multiple definition of `db_systemfilelog::names'
test.o:(.data.rel.local+0x144): first defined here
DbManager.o:(.data.rel.local+0x1f0): multiple definition of `db_secfilelog::names'
test.o:(.data.rel.local+0x1f0): first defined here
DbManager.o:(.data.rel.local+0x194): multiple definition of `db_urlhistory::names'
test.o:(.data.rel.local+0x194): first defined here
DbManager.o:(.data.rel.local+0xf4): multiple definition of `db_smuser::names'
test.o:(.data.rel.local+0xf4): first defined here
DbManager.o:(.data.rel.local+0x1a8): multiple definition of `db_errordesc::names'
test.o:(.data.rel.local+0x1a8): first defined here
DbManager.o:(.data.rel.local+0x1c8): multiple definition of `db_assets_connection::names'
test.o:(.data.rel.local+0x1c8): first defined here
DbManager.o:(.data.rel.local+0x1d8): multiple definition of `db_reel_connection::names'
test.o:(.data.rel.local+0x1d8): first defined here
DbManager.o:(.data.rel.local+0x124): multiple definition of `db_showtime::names'
test.o:(.data.rel.local+0x124): first defined here
DbManager.o:(.data.rel.local+0x160): multiple definition of `db_transferlog::names'
test.o:(.data.rel.local+0x160): first defined here
DbManager.o:(.data.rel.local+0xdc): multiple definition of `db_spl::names'
test.o:(.data.rel.local+0xdc): first defined here
DbManager.o:(.data.rel.local+0x108): multiple definition of `db_showlog::names'
test.o:(.data.rel.local+0x108): first defined here
DbManager.o:(.data.rel.local+0xa0): multiple definition of `db_monitor_errorinfo::names'
test.o:(.data.rel.local+0xa0): first defined here
DbManager.o:(.data.rel.local+0x1b4): multiple definition of `db_datadict::names'
test.o:(.data.rel.local+0x1b4): first defined here
DbManager.o:(.data.rel.local+0x20): multiple definition of `db_cpl::names'
test.o:(.data.rel.local+0x20): first defined here
collect2: ld returned 1 exit status
make: *** [libdbmanager.so] Error 1


在DbManager.cpp  和 test.cpp中都包含了一个自定义头文件  db_table.h 。。。
db_table.h在两cpp文件中都用到了,去除的话就显示未定义。
db_table.h是一个数据库表格类的头文件(MySQL++);

文件中 #ifndef TEST_H #define TEST_H #endif  都加了。

一直出现重定义。
请问这是为啥。求解。谢谢

|
这个是因为你的db_table.h文件中定义了全局变量,比如db_cpl::names。因为你的两个C文件都包含了公共头文件,因此,在它们的.o文件都会被加入这些符号。当这些.o文件联接到一个程序或者库中时,就产生了符号重复问题。
解决的办法:在这些全局变量前面加上extern 修饰符就可以了。

一般的习惯是,将全局变量定义在它初始化的*.c或者*.cpp中,然后在公共头文件中使用extern声明该全局变量,以便该全局变量在源文件间共享。


|
你编绎成生两个对象文件test.o DbManager.o都包含了db_table.h里的定义,链接的时候自然会重复定义.

正确的做法是在头文件里只声明而不要定义

    
 
 

您可能感兴趣的文章:

  • 关于arm交叉编译器4.3.3编译程序报错,但是3.4.5却能编译通过的问题
  • 关于EJB编译问题?(带的编译问题)
  • 编译问题,引用了别人的一个库,结果编译出问题。
  • eclipse 的c编译器编译问题
  • 关于在linux交叉编译powerpc-e300c3-linux-gcc的编译问题
  • 这个宏cc编译正常, pro*c 编译出问题,有办法解决吗?
  • 请教关于用c编译出来的.a文件和用c++编译出来的.a文件的互用问题
  • 在linux+x86下用交叉编译器编译出能在solaris+x86运行的文件时遇到的问题
  • 菜鸟问题: redhat linux 编译一个最简单的c程序, 其中包含了<studio.h>头文件,但在gcc编译时,提示找不到studio.h文件,请问各位大大
  • 如果重新编译了.so文件后,但程序运行结果还是编译前的情况,大概是什么问题呢?
  • [菜鸟问题]简单的编译问题(我怎么编译不通过阿!)
  • JB的源文件在JB中可以编译,改用JDK编译,遇到一些问题,解决马上给分100!
  • 菜鸟问题:javabean的编译问题。
  • 问题来了,内核编译.
  • 请问一个关于gcc编译的问题
  • linux下面用makefile编译的问题,请高手指点。
  • Tag问题==TEI文件编译后放在webapps下么,但不好使?==Tag问题
  • 交叉编译问题
  • linux下交叉编译的问题
  • KDeveloper的编译问题
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • linux/centos源码安装nginx编译配置选项参数介绍
  • 请教:JSP编译器编译成字节码,跟别的编译器编译出来的有什么不同呢?
  • CentOS 6内核升级:下载编译启用新内核版本详细过程
  • 编译GCC时能不能只编译C/C++的编译器?
  • 高速的网络抓包库PF_ring介绍及编译安装
  • JB下,我的程序编译得好慢!请问用什么方法编译才可以快一点?或编译顺序改变一下?
  • 请问gdb是不是只能调试gcc编译的程序,在unix下用其它编译器编译的程序是不是不一定能用gdb调试的?
  • 用JCreator写了一个小程序,有十几个class,当修改某个文件重新编译,javac并没有编译修改的文件,请问要如何做javac才会重新编译所有的
  • 问:关于gcc编译器和g++编译器
  • 嵌入式linux开发:一段代码在windows平台用VC编译运行正常,在linux平台用gcc编译运行正常,但是用arm-linux-gcc编译在嵌入式板子上运行就不正常.
  • 在cygwin编译驱动程序要不要交叉编译?
  • 关于如何把编译进内核的编译成模块
  • C编译器 c++编译器 wieldylcc
  • Linux下gcc编译时,如何以静态链接的形式编译?
  • PROC开发时 //注释编译不通过 如何设置使用cpp编译。
  • 编译失败后如何再继续编译
  • 编译qt-x11,最后编译生成可执行文件时候,make出错
  • 如何查看已编译安装软件的编译命令行
  • 请问哪里有反编译.class文件的反编译器?
  • 用Jdk编译时出现提示要加 -deprecation 再编译,请教??
  • linux下有没有能编译出16bit代码的C语言编译器?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3