繁体   English   中英

clang:警告:编译期间未使用的参数:'-rdynamic'

[英]clang: warning: argument unused during compilation: '-rdynamic'

我尝试在我的 CMakeLists.txt 文件中使用-rdynamic选项,如下所示:

cmake_minimum_required(VERSION 3.5)
project(Tmuduo CXX)
...
set(CMAKE_CXX_STANDARD 11)
set(THREADS_PREFER_PTHREAD_FLAG ON)
find_package(Threads REQUIRED)

if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
    add_compile_options(-Wthread-safety )
endif()

add_compile_options(
 # -DVALGRIND
 -Wall
 -Wno-unused-parameter
 -Woverloaded-virtual
 -Wpointer-arith
 -Wwrite-strings
 -O3
 -rdynamic
 )
...

当我使用cmake .. -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_C_COMPILER=clangmake VERBOSE=1 ,我收到如下消息: 在此处输入图片说明

正如您所看到的, -rdynamic编译选项确实出现在 clang++ 命令中,并且编译器也抱怨该参数未使用。 但是当我使用下面的命令时,发生了一些奇怪的事情。

clang++ -I/home/phoenix/MyProject/Tmuduo -g -Wthread-safety -Wall -Wno-unused-parameter -Woverloaded-virtual -Wpointer-arith -Wwrite-strings -rdynamic -std=gnu++11 test/Exception_test.cc base/Exception.cc base/CurrentThread.cc -o exception_test -O3

一切顺利。 这一次, -rdynamic选项起作用了。 这真的让我很困惑。 谁能告诉我这里发生了什么? 为什么 cmake 失败时 clang++ 命令有效?

因为-rdynamic是一个链接器选项,所以如果你在将源文件编译成对象*.o它,它什么都不做,这里没有链接阶段。

当将所有*.o和库链接到最终可执行文件中时,它实际上是被使用的。

来自man gcc (但 clang 使用相同的):

        -rdynamic
           Pass the flag -export-dynamic to the ELF linker, on targets that support it.
           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.

暂无
暂无

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

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