【问题标题】:libpcre throwing a ".rodata can not be used when making a shared object" error while compiling NGINXlibpcre 在编译 NGINX 时抛出“.rodata can not be used when making a shared object”错误
【发布时间】:2018-02-03 16:37:45
【问题描述】:

我正在尝试使用以下说明在 Ubuntu 16.04.3 LTS 上编译 NGINX:

https://www.vultr.com/docs/how-to-compile-nginx-from-source-on-ubuntu-16-04

我尝试使用nginx-1.13.8(主线)而不是nginx-1.13.1,但是在make 期间,我遇到了pcre 库的错误:

...
objs/src/stream/ngx_stream_ssl_preread_module.o \
objs/ngx_modules.o \
-Wl,-Bsymbolic-functions -fPIC -pie -Wl,-z,relro -Wl,-z,now -ldl -lpthread -lpthread -lcrypt ../pcre-8.40/.libs/libpcre.a ../openssl-1.1.0f/.openssl/lib/libssl.a ../openssl-1.1.0f/.openssl/lib/libcrypto.a -ldl ../zlib-1.2.11/libz.a \
-Wl,-E
/usr/bin/ld: ../pcre-8.40/.libs/libpcre.a(libpcre_la-pcre_compile.o): relocation R_X86_64_32S against `.rodata' can not be used when making a shared object; recompile with -fPIC
../pcre-8.40/.libs/libpcre.a: error adding symbols: Bad value
collect2: error: ld returned 1 exit status
objs/Makefile:328: recipe for target 'objs/nginx' failed
make[1]: *** [objs/nginx] Error 1
make[1]: Leaving directory '/home/user1/nginx-1.13.8'
Makefile:8: recipe for target 'build' failed
make: *** [build] Error 2

即使尝试按照说明进行更改:(-fPIE)

--with-cc-opt='-g -O2 -fPIE -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2' \
--with-ld-opt='-Wl,-Bsymbolic-functions -fPIE -pie -Wl,-z,relro -Wl,-z,now'

到:(-fPIC)

--with-cc-opt='-g -O2 -fPIC -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2' \
--with-ld-opt='-Wl,-Bsymbolic-functions -fPIC -pie -Wl,-z,relro -Wl,-z,now'

错误仍然存​​在。我该如何解决这个问题?理想情况下只更改./configure 参数?到目前为止,该系统是全新的设置。

【问题讨论】:

    标签: nginx compiler-errors ubuntu-16.04 pcre


    【解决方案1】:

    尝试在 nginx 中包含此配置选项:

    --with-pcre-opt='-g -Ofast -fPIC -m64 -march=native -fstack-protector-strong -D_FORTIFY_SOURCE=2' \
    --with-zlib-opt='-g -Ofast -fPIC -m64 -march=native -fstack-protector-strong -D_FORTIFY_SOURCE=2' \
    

    我刚刚设法使用这个附加选项安装了 nginx。

    【讨论】:

      【解决方案2】:

      我也有同样的问题。我正在尝试使用来自sticky-module-ng 的粘性会话支持构建 Nginx 安装。使用 Ubuntu Nginx 构建指南中的配置参数会产生 pcre 错误。我尝试了 nginx.org 构建指南中添加了 openssl 的示例参数,现在我没有收到任何错误。

      ./configure \
          --prefix=/usr/share/nginx \
          --sbin-path=/usr/sbin/nginx \
          --conf-path=/etc/nginx/nginx.conf \
          --modules-path=/usr/lib/nginx/modules \
          --build=Ubuntu \
          --error-log-path=/var/log/nginx/error.log \
          --http-log-path=/var/log/nginx/access.log \
          --pid-path=/run/nginx.pid \
          --lock-path=/var/lock/nginx.lock \
          --with-http_ssl_module \
          --with-pcre=../pcre-8.40 \
          --with-zlib=../zlib-1.2.11 \
          --with-openssl=../openssl-1.1.0f
      

      但是我对 Nginx 还不够熟悉,无法知道我是否遗漏了一些关键参数。

      【讨论】:

        【解决方案3】:

        遇到了同样的问题。解决了

        CFLAGS="-g -O2 -fvisibility=hidden -fPIC" 导出 CFLAGS LDFLAGS=-fPIC 导出 LDFLAGS

        然后进入../pcre8.40项目

        。/配置 制作

        然后进入../zlib-1.2.11项目

        。/配置 制作

        在 nginx 项目中执行 ./configure 和 make 之后工作。

        【讨论】:

          猜你喜欢
          • 2022-01-12
          • 2018-07-28
          • 1970-01-01
          • 1970-01-01
          • 2022-01-23
          • 2021-12-13
          • 2022-12-02
          • 2016-01-06
          • 2022-12-02
          相关资源
          最近更新 更多