我想借助CMAKE將一些MSVC項目移植到Linux。 在其中一個庫項目中,有一些函數只是聲明的,並沒有在任何地方定義或在任何地方使用。 爲前:如何解決未定義的引用時,他們不使用GCC和CMAKE
int fun_a();
int fun_unsed() /*This function is never used in project*/
{
fun_a();
}
現在,當我嘗試做製作在Linux中,我觀察未定義參考聲明的函數。但是相同的代碼在MSVC上使用相同的CMAKE文件。
我試圖在我的CMAKE文件中使用下面的標誌(來自here),但似乎沒有幫助。
SET(GCC_COVERAGE_COMPILE_FLAGS 「-unresolved符號=忽略所有」) SET(GCC_COVERAGE_LINK_FLAGS 「-unresolved符號=忽略所有」)
SET(CMAKE_CXX_FLAGS 「$ {CMAKE_CXX_FLAGS} $ {GCC_COVERAGE_COMPILE_FLAGS}」 ) SET(CMAKE_EXE_LINKER_FLAGS「$ {CMAKE_EXE_LINKER_FLAGS} $ {GCC_COVERAGE_LINK_FLAGS}」)
我錯過了什麼?
下面是可執行
#Add Library Projects to the test application
add_subdirectory ("${PROJECT_BINARY_DIR}/../../src/build/vc/" "${PROJECT_BINARY_DIR}/../../src/build/vc/")
#set additional search paths for libraries
#set(CMAKE_LIBRARY_PATH ${PROJECT_BINARY_DIR}/../../lib/Debug)
link_directories(${PROJECT_BINARY_DIR}/../../lib ${OPENCV_BUILD}/lib)
#set ignore undefined & unused functions errors. It seems GCC by defalt looks for them.
SET(GCC_COVERAGE_LINK_FLAGS "-unresolved-symbols=ignore-all")
SET(GCC_COVERAGE_COMPILE_FLAGS "-ffunction-sections")
SET(GCC_COVERAGE_LINK_FLAGS "-Wl,-gc-sections -flto")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${GCC_COVERAGE_COMPILE_FLAGS}")
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${GCC_COVERAGE_LINK_FLAGS}")
#Get the exicutable for source files
add_executable (FaceAnalysis ${sources})
target_link_libraries (FaceAnalysis faceDetect.a libopencv_core.so libopencv_imgproc.so libopencv_imgcodecs.so libopencv_videoio.so libopencv_objdetect.so libopencv_highgui.so libopencv_video.so libopencv_ml.so SDL2)
add_dependencies(FaceAnalysis faceDetect)
顯示精確的'CMakeLists.txt'。有一些關於設置* CMAKE_CXX_FLAGS *的具體內容。另外,運行構建過程'make V = 1',使用該選項,您可以看到用於編譯和鏈接的完整命令行。 – Tsyvarev
@Tsyvarev添加了CMakeLists.txt文件,使V = 1不提供任何額外的信息 – Rama
對不起,我的意思是'使VERBOSE = 1'。你的'CMakeLists.txt'的內容看起來很合理,除了:1.你設置了* GCC_COVERAGE_LINK_FLAGS *變量**兩次**,所以第二個任務將覆蓋第一個。 2.在第一次賦值時,它應該是值的開始處的附加短劃線:'--unresolved-symbols = ...'。 – Tsyvarev