简体   繁体   English

GCC v4.9.2上无法识别的命令行选项'-rdynamic'

[英]unrecognized command line option ‘-rdynamic’ on GCC v4.9.2

I'm using GCC v4.9.2 under Cygwin on Windows 7 64-bit, but running into an issue trying to compile uWSGI . 我在Windows 7 64位上的Cygwin下使用GCC v4.9.2,但是在尝试编译uWSGI时遇到问题

The error I'm receiving is - 我收到的错误是-

gcc: error: unrecognized command line option ‘-rdynamic’

GCC version output - GCC版本输出-

$ gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-pc-cygwin/4.9.2/lto-wrapper.exe
Target: x86_64-pc-cygwin
Configured with: /cygdrive/i/szsz/tmpp/gcc/gcc-4.9.2-3.x86_64/src/gcc-4.9.2/configure --srcdir=/cygdrive/i/szsz/tmpp/gcc/gcc-4.9.2-3.x86_64/src/gcc-4.9.2 --prefix=/usr --exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --libexecdir=/usr/libexec --datadir=/usr/share --localstatedir=/var --sysconfdir=/etc --libdir=/usr/lib --datarootdir=/usr/share --docdir=/usr/share/doc/gcc --htmldir=/usr/share/doc/gcc/html -C --build=x86_64-pc-cygwin --host=x86_64-pc-cygwin --target=x86_64-pc-cygwin --without-libiconv-prefix --without-libintl-prefix --libexecdir=/usr/lib --enable-shared --enable-shared-libgcc --enable-static --enable-version-specific-runtime-libs --enable-bootstrap --enable-__cxa_atexit --with-dwarf2 --with-tune=generic --enable-languages=ada,c,c++,fortran,lto,objc,obj-c++ --enable-graphite --enable-threads=posix --enable-libatomic --enable-libgomp --disable-libitm --enable-libquadmath --enable-libquadmath-support --enable-libssp --enable-libada --enable-libgcj-sublibs --disable-java-awt --disable-symvers --with-ecj-jar=/usr/share/java/ecj.jar --with-gnu-ld --with-gnu-as --with-cloog-include=/usr/include/cloog-isl --without-libiconv-prefix --without-libintl-prefix --with-system-zlib --enable-linker-build-id
Thread model: posix
gcc version 4.9.2 (GCC)

I'm invoking the build with CFLAGS="-Wno-error" make . 我正在使用CFLAGS="-Wno-error" make调用构建。

I'm not sure why I'm getting this error as I can see in the documentation from here that flag -rdynamic exists. 我不确定为什么会收到此错误,正如我从此处的文档中看到的那样,存在-rdynamic标志。

What am I missing? 我想念什么?

I think I've got it... 我想我知道了...

Here's what happens on my laptop ( Cygwin 2.831 x86 on W7 x64 ): 这是我的笔记本电脑( W7 x64上的Cygwin 2.831 x86 )发生的情况:

gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/i686-pc-cygwin/4.8.2/lto-wrapper.exe
Target: i686-pc-cygwin
Configured with: /cygdrive/i/szsz/tmpp/cygwin64/gcc/gcc-4.8.2-1/src/gcc-4.8.2/configure --srcdir=/cygdrive/i/szsz/tmpp/cygwin64/gcc/gcc-4.8.2-1/src/gcc-4.8.2 --prefix=/usr --exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --libexecdir=/usr/libexec --datadir=/usr/share --localstatedir=/var --sysconfdir=/etc --libdir=/usr/lib --datarootdir=/usr/share --docdir=/usr/share/doc/gcc -C --build=i686-pc-cygwin --host=i686-pc-cygwin --target=i686-pc-cygwin --without-libiconv-prefix --without-libintl-prefix --enable-shared --enable-shared-libgcc --enable-static --enable-version-specific-runtime-libs --enable-bootstrap --disable-__cxa_atexit --with-dwarf2 --with-arch=i686 --with-tune=generic --disable-sjlj-exceptions --enable-languages=ada,c,c++,fortran,java,lto,objc,obj-c++ --enable-graphite --enable-threads=posix --enable-libatomic --enable-libgomp --disable-libitm --enable-libquadmath --enable-libquadmath-support --enable-libssp --enable-libada --enable-libjava --enable-libgcj-sublibs --disable-java-awt --disable-symvers --with-ecj-jar=/usr/share/java/ecj.jar --with-gnu-ld --with-gnu-as --with-cloog-include=/usr/include/cloog-isl --without-libiconv-prefix --without-libintl-prefix --with-system-zlib
Thread model: posix
gcc version 4.8.2 (GCC)

When I pass -rdynamic : 当我通过-rdynamic

gcc -rdynamic
gcc: fatal error: no input files
compilation terminated.

Compared to -rdynamic1 : -rdynamic1相比:

gcc -rdynamic1
gcc: error: unrecognized command line option ‘-rdynamic1’
gcc: fatal error: no input files
compilation terminated.

The man page of my gcc mentions it (I'm not sure how relevant is that), but gcc -v --help doesn't display it under the linker specific options. 我的gccman页中提到了它(我不确定那有多重要),但是gcc -v --help不在链接器特定选项下显示它。 I thought that maybe something is different about how the gcc s are configured but I didn't see any difference that would matter (both have --with-gnu-ld - which seems related - specified). 我认为gcc的配置方式可能有所不同,但是我没有看到任何重要的差异(都指定了--with-gnu-ld似乎相关)。

Then I downloaded 4.8.2 and 4.9.2 sources and start searching and comparing but again I couldn't find anything (it's true the search could be widely extended :) ). 然后,我下载了4.8.24.9.2源代码并开始搜索和比较,但是我再也找不到任何东西(确实可以广泛扩展搜索:))。

But while browsing the configure file I noticed something that could be related, then I checked the ld command line options and I think I have an alternative: 但是在浏览configure文件时,我发现可能存在一些相关之处,然后我检查了ld命令行选项,并认为我有另一种选择:

Instead of -rdynamic you could pass -Wl,--export-all-symbols . 可以使用-Wl,--export-all-symbols -rdynamic -Wl,--export-all-symbols代替-rdynamic That works for me (that's not very relevant since -rdynamic also works for me, unlike in your case :)) 这对我-rdynamic (这不太相关,因为-rdynamic也对我-rdynamic ,与您的情况不同:))

The link you give says: 您提供的链接显示:

-rdynamic

Pass the flag -export-dynamic to the ELF linker, on targets that support it . 将标志-export-dynamic传递到支持它的目标上的ELF链接器。 This instructs the linker to add all symbols, not only used ones, to the dynamic symbol table. 这指示链接器将所有符号(不仅是已使用的符号)添加到动态符号表中。 This option is needed for some uses of dlopen or to allow obtaining backtraces from within a program. 对于dlopen的某些用途或为了从程序内部获取回溯,此选项是必需的。

(Emphasis added.) (已添加重点。)

Is Cygwin using ELF format object files? Cygwin是否使用ELF格式的目标文件? It seems unlikely. 似乎不太可能。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM