首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Solaris 10上将pcre 3.38编译为64位-错误的ELF类

在Solaris 10上将pcre 3.38编译为64位-错误的ELF类
EN

Stack Overflow用户
提问于 2018-06-21 23:40:23
回答 1查看 480关注 0票数 0

我正在尝试将Solaris10上的pcre 3.38编译为64位二进制文件。它开始编译,然后在某个时候停止抱怨“错误的ELF类”,事实上,事实证明,一些创建的目标文件都是32位的-尽管大多数都是所需的64位。

以下是我所做的工作:

代码语言:javascript
复制
./configure CFLAGS=-m64 LDFLAGS=-m64

然后

代码语言:javascript
复制
make            
rm -f pcre_chartables.c
ln -s ./pcre_chartables.c.dist pcre_chartables.c
make  all-am
make[1]: Entering directory `/local/src/pcre-8.38'
  CC       libpcre_la-pcre_byte_order.lo
  CC       libpcre_la-pcre_compile.lo
  CC       libpcre_la-pcre_config.lo
  CC       libpcre_la-pcre_dfa_exec.lo
  CC       libpcre_la-pcre_exec.lo
  CC       libpcre_la-pcre_fullinfo.lo
  CC       libpcre_la-pcre_get.lo
  CC       libpcre_la-pcre_globals.lo
  CC       libpcre_la-pcre_jit_compile.lo
  CC       libpcre_la-pcre_maketables.lo
  CC       libpcre_la-pcre_newline.lo
  CC       libpcre_la-pcre_ord2utf8.lo
  CC       libpcre_la-pcre_refcount.lo
  CC       libpcre_la-pcre_string_utils.lo
  CC       libpcre_la-pcre_study.lo
  CC       libpcre_la-pcre_tables.lo
  CC       libpcre_la-pcre_ucd.lo
  CC       libpcre_la-pcre_valid_utf8.lo
  CC       libpcre_la-pcre_version.lo
  CC       libpcre_la-pcre_xclass.lo
  CC       libpcre_la-pcre_chartables.lo
  CCLD     libpcre.la
  CC       libpcreposix_la-pcreposix.lo
  CCLD     libpcreposix.la
  CXX      libpcrecpp_la-pcrecpp.lo
  CXX      libpcrecpp_la-pcre_scanner.lo
  CXX      libpcrecpp_la-pcre_stringpiece.lo
  CXXLD    libpcrecpp.la
ld: fatal: file ./.libs/libpcre.so: wrong ELF class: ELFCLASS64
ld: fatal: file processing errors. No output written to .libs/libpcrecpp.so.0.0.1
collect2: ld returned 1 exit status
make[1]: *** [libpcrecpp.la] Error 1
make[1]: Leaving directory `/local/src/pcre-8.38'
make: *** [all] Error 2

检查一下war做了什么,我看到的主要是64位的目标文件,但也有一些32位的,我假设这就是问题的来源:

代码语言:javascript
复制
file .libs/*
.libs/libpcre_la-pcre_byte_order.o:     ELF 64-bit MSB relocatable SPARCV9 Version 1
.libs/libpcre_la-pcre_chartables.o:     ELF 64-bit MSB relocatable SPARCV9 Version 1
.libs/libpcre_la-pcre_compile.o:        ELF 64-bit MSB relocatable SPARCV9 Version 1
.libs/libpcre_la-pcre_config.o: ELF 64-bit MSB relocatable SPARCV9 Version 1
.libs/libpcre_la-pcre_dfa_exec.o:       ELF 64-bit MSB relocatable SPARCV9 Version 1
.libs/libpcre_la-pcre_exec.o:   ELF 64-bit MSB relocatable SPARCV9 Version 1
.libs/libpcre_la-pcre_fullinfo.o:       ELF 64-bit MSB relocatable SPARCV9 Version 1
.libs/libpcre_la-pcre_get.o:    ELF 64-bit MSB relocatable SPARCV9 Version 1
.libs/libpcre_la-pcre_globals.o:        ELF 64-bit MSB relocatable SPARCV9 Version 1
.libs/libpcre_la-pcre_jit_compile.o:    ELF 64-bit MSB relocatable SPARCV9 Version 1
.libs/libpcre_la-pcre_maketables.o:     ELF 64-bit MSB relocatable SPARCV9 Version 1
.libs/libpcre_la-pcre_newline.o:        ELF 64-bit MSB relocatable SPARCV9 Version 1
.libs/libpcre_la-pcre_ord2utf8.o:       ELF 64-bit MSB relocatable SPARCV9 Version 1
.libs/libpcre_la-pcre_refcount.o:       ELF 64-bit MSB relocatable SPARCV9 Version 1
.libs/libpcre_la-pcre_string_utils.o:   ELF 64-bit MSB relocatable SPARCV9 Version 1
.libs/libpcre_la-pcre_study.o:  ELF 64-bit MSB relocatable SPARCV9 Version 1
.libs/libpcre_la-pcre_tables.o: ELF 64-bit MSB relocatable SPARCV9 Version 1
.libs/libpcre_la-pcre_ucd.o:    ELF 64-bit MSB relocatable SPARCV9 Version 1
.libs/libpcre_la-pcre_valid_utf8.o:     ELF 64-bit MSB relocatable SPARCV9 Version 1
.libs/libpcre_la-pcre_version.o:        ELF 64-bit MSB relocatable SPARCV9 Version 1
.libs/libpcre_la-pcre_xclass.o: ELF 64-bit MSB relocatable SPARCV9 Version 1
.libs/libpcre.a:        current ar archive, 32-bit symbol table
.libs/libpcre.la:       ascii text
.libs/libpcre.lai:      ascii text
.libs/libpcre.so:       ELF 64-bit MSB dynamic lib SPARCV9 Version 1, dynamically linked, not stripped, no debugging information available
.libs/libpcre.so.1:     ELF 64-bit MSB dynamic lib SPARCV9 Version 1, dynamically linked, not stripped, no debugging information available
.libs/libpcre.so.1.2.6: ELF 64-bit MSB dynamic lib SPARCV9 Version 1, dynamically linked, not stripped, no debugging information available
.libs/libpcrecpp_la-pcre_scanner.o:     ELF 32-bit MSB relocatable SPARC Version 1
.libs/libpcrecpp_la-pcre_stringpiece.o: ELF 32-bit MSB relocatable SPARC Version 1
.libs/libpcrecpp_la-pcrecpp.o:  ELF 32-bit MSB relocatable SPARC Version 1
.libs/libpcreposix_la-pcreposix.o:      ELF 64-bit MSB relocatable SPARCV9 Version 1
.libs/libpcreposix.a:   current ar archive, 32-bit symbol table
.libs/libpcreposix.la:  ascii text
.libs/libpcreposix.lai: ascii text
.libs/libpcreposix.so:  ELF 64-bit MSB dynamic lib SPARCV9 Version 1, dynamically linked, not stripped, no debugging information available
.libs/libpcreposix.so.0:        ELF 64-bit MSB dynamic lib SPARCV9 Version 1, dynamically linked, not stripped, no debugging information available
.libs/libpcreposix.so.0.0.3:    ELF 64-bit MSB dynamic lib SPARCV9 Version 1, dynamically linked, not stripped, no debugging information available

我不清楚为什么要构建32位的二进制文件,CFLAGS=-m64应该会解决这个问题。

你知道如何进一步调试吗?

EN

回答 1

Stack Overflow用户

发布于 2018-06-22 13:50:45

睡了一夜好觉后,我找到了解决办法。所有32位文件的名称中都有cpp,这暗示了它们必须支持c++。此外,对于32位目标文件,make的输出通过在行前加上CXX来指示c++编译器的使用。

因此,有两种方法可以解决这个问题。如果需要c++支持,修复方法是指示c++编译器生成64个二进制文件,方法是将CXXFLAGS=-m64添加到配置行:

代码语言:javascript
复制
./configure CXXFLAGS=-m64 CFLAGS=-m64 LDFLAGS=-m64

另一种选择是禁用c++:

代码语言:javascript
复制
./configure --disable-cpp CFLAGS=-m64 LDFLAGS=-m64

在我的情况下,我还不确定我想要什么,但这里有解决这个问题的方法。

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

https://stackoverflow.com/questions/50972566

复制
相关文章

相似问题

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