重做安装程序(Linux)

时间:2015-02-26 14:59:29

标签: c++ linux makefile 64-bit 32bit-64bit

我分叉了setroot并将其重命名为mhsetroot。当我运行32位linux(Chrunchbang)系统时,我添加了所有新功能。现在我买了一台带有Crunchbang的新64位笔记本电脑。它也可以运行32位。但它不会使用./configure - make - sudo make install安装我的程序。

它第一次说我的.o文件不兼容或类似的东西。所以我重新编译它,然后使用这一行再次尝试(第二天)

gcc `-m32 imlib2-config --cflags` `imlib2-config --libs` -o mhsetroot32 mhsetroot-v1.6.2.c

然后将.o文件的名称更改为cooraspond到之前的名称,然后执行./configure。虽然有效但是,现在在我运行第一个“make”之后,我现在得到了这个错误。

  dude@crunchbang64:~/downloads/mhsetroot-v1.6.2$ make
Making all in src
make[1]: Entering directory `/home/dude/downloads/mhsetroot-v1.6.2/src'
gcc -g -O2  -Wall -g -O2   -o mhsetroot mhsetroot-v1.6.2.o  -L/usr/lib      -lImlib2 -L/usr/lib/x86_64-linux-gnu -lfreetype -lz -lX11 -lXext -ldl -lm
mhsetroot-v1.6.2.o: In function `_fini':
(.fini+0x0): multiple definition of `_fini'
/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu/crti.o:   (.fini+0x0): first defined here
mhsetroot-v1.6.2.o: In function `__data_start':
(.data+0x0): multiple definition of `__data_start'
/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu/crt1.o: (.data+0x0): first defined here
mhsetroot-v1.6.2.o: In function `__data_start':
(.data+0x8): multiple definition of `__dso_handle'
/usr/lib/gcc/x86_64-linux-gnu/4.7/crtbegin.o:(.data+0x0): first defined here
mhsetroot-v1.6.2.o:(.rodata+0x0): multiple definition of `_IO_stdin_used'
/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu/crt1.o:(.rodata.cst4+0x0): first defined here
mhsetroot-v1.6.2.o: In function `_start':
(.text+0x0): multiple definition of `_start'
/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux- gnu/crt1.o:(.text+0x0): first defined here
mhsetroot-v1.6.2.o: In function `_init':
(.init+0x0): multiple definition of `_init'
/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu/crti.o:(.init+0x0): first defined here
/usr/lib/gcc/x86_64-linux-gnu/4.7/crtend.o:(.tm_clone_table+0x0): multiple definition of `__TMC_END__'
mhsetroot-v1.6.2.o:(.data+0x10): first defined here
/usr/bin/ld: error in mhsetroot-v1.6.2.o(.eh_frame); no .eh_frame_hdr table will be created.
collect2: error: ld returned 1 exit status
make[1]: *** [mhsetroot] Error 1
make[1]: Leaving directory `/home/dude/downloads/mhsetroot-v1.6.2/src'
make: *** [all-recursive] Error 1
dude@crunchbang64:~/downloads/mhsetroot-v1.6.2$ 

因为我在运行32位linux时所做的就是找到一个旧的安装makefile - 整个事情只是修改它以使用我的程序所以现在我有什么办法让它再次在我的工作64位Linux?

1 个答案:

答案 0 :(得分:0)

`-m32 imlib2-config --cflags`

不正确,不会有效,因此不能成为您实际使用的命令。

gcc行也没有创建目标文件,它会创建一个二进制文件。

你留下-c参数停止编译。

这可能是问题,因为您继续尝试将二进制文件链接到另一个二进制文件。