Gooddbird / rocket

c++ rpc framework, simplified version of tinyrpc。
222 stars 45 forks source link

编译不通过 #1

Open Newkami opened 1 year ago

Newkami commented 1 year ago

好像libtinyxml存在一点点问题 试了几次最后make的时候都会报这个错 系统用的是centos8.5

g++ -g -O0 -std=c++11 -Wall -Wno-deprecated -Wno-unused-but-set-variable -I./ -Irocket  -Irocket/common -Irocket/net testcases/test_log.cc -o bin/test_log lib/librocket.a /usr/local/lib/libprotobuf.a    /usr/lib/libtinyxml.a -ldl -pthread
/usr/lib/libtinyxml.a:(.rodata+0x0): _IO_stdin_used 的多重定义
/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crt1.o:(.rodata.cst4+0x0):第一次在此定义
/usr/lib/libtinyxml.a:在函数‘main’中:
(.text+0x7a0): main 的多重定义
/tmp/ccqHyLAa.o:/home/zz/CPlusPlusWorkspace/rocket/testcases/test_log.cc:18:第一次在此定义
/usr/lib/libtinyxml.a:(.rodata+0x8): __dso_handle 的多重定义
/usr/lib/gcc/x86_64-redhat-linux/8/crtbegin.o:(.rodata+0x0):第一次在此定义
/usr/lib/libtinyxml.a:在函数‘_fini’中:
(.fini+0x0): _fini 的多重定义
/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crti.o:(.fini+0x0):第一次在此定义
/usr/lib/libtinyxml.a:在函数‘_dl_relocate_static_pie’中:
(.text+0x3870): _dl_relocate_static_pie 的多重定义
/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crt1.o:(.text[.text.group]+0x0):第一次在此定义
/usr/lib/libtinyxml.a:在函数‘_start’中:
(.text+0x3840): _start 的多重定义
/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crt1.o:(.text+0x0):第一次在此定义
/usr/lib/libtinyxml.a:在函数‘_init’中:
(.init+0x0): _init 的多重定义
/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crti.o:(.init+0x0):第一次在此定义
/usr/lib/libtinyxml.a:在函数‘data_start’中:
(.data+0x0): __data_start 的多重定义
/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crt1.o:(.data+0x0):第一次在此定义
/usr/lib/gcc/x86_64-redhat-linux/8/crtend.o:(.tm_clone_table+0x0): __TMC_END__ 的多重定义
/usr/lib/libtinyxml.a:(.data+0x100):第一次在此定义
/usr/bin/ld: error in /usr/lib/libtinyxml.a(.eh_frame); no .eh_frame_hdr table will be created.
collect2: 错误:ld 返回 1
make: *** [makefile:43:bin/test_log] 错误 1
Gooddbird commented 1 year ago

这个问题是因为 libtinyxml.a里面含有main函数,冲突了。是因为 libtinyxml.a 安装的时候没改makefile,看下视频重新安装一下

Newkami commented 1 year ago

up视频或者Readme中的教程最好改一下昂 只改OUTPUT不太行 将其中的OUTPUT := xmltest一行修改为:OUTPUT := libtinyxml.a 将xmltest.cpp从SRCS:=tinyxml.cpp tinyxml-parser.cpp xmltest.cpp tinyxmlerror.cpp tinystr.cpp中删除 注释掉xmltest.o:tinyxml.h tinystr.h。因为不需要将演示程序添加到动态库中。 将${LD} -o $@ ${LDFLAGS} ${OBJS} ${LIBS} ${EXTRA_LIBS} 修改为:${AR} $@ ${LDFLAGS} ${OBJS} ${LIBS} ${EXTRA_LIBS} 然后再make就可以啦

Yingqiao1998 commented 1 year ago

up视频或者Readme中的教程最好改一下昂 只改OUTPUT不太行 将其中的OUTPUT := xmltest一行修改为:OUTPUT := libtinyxml.a 将xmltest.cpp从SRCS:=tinyxml.cpp tinyxml-parser.cpp xmltest.cpp tinyxmlerror.cpp tinystr.cpp中删除 注释掉xmltest.o:tinyxml.h tinystr.h。因为不需要将演示程序添加到动态库中。 将${LD} -o @{LDFLAGS} ${OBJS} ${LIBS} ${EXTRA_LIBS} 修改为:${AR} @{LDFLAGS} ${OBJS} ${LIBS} ${EXTRA_LIBS} 然后再make就可以啦

你可真是我今晚的98%救世主,要是最后那个修改打对了就完美了: 将其中的OUTPUT := xmltest一行修改为OUTPUT := libtinyxml.a

  将xmltest.cpp从SRCS:=tinyxml.cpp tinyxml-parser.cpp xmltest.cpp tinyxmlerror.cpp tinystr.cpp中删除,

  注释掉xmltest.o:tinyxml.h tinystr.h。

  将${LD} -o $@ ${LDFLAGS} ${OBJS} ${LIBS} ${EXTRA_LIBS}修改为: ${AR} $@ ${LDFLAGS} ${OBJS} ${LIBS} ${EXTRA_LIBS}。 我特么狂报stdout版本错误编译不成功,我还以为我用cmake改的有问题链接库不正确。 /usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib/libtinyxml.a: stdout: invalid version 3 (max 0) /usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib/libtinyxml.a: error adding symbols: bad value