簡體   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