CMAKEの助けを借りて、いくつかのMSVCプロジェクトをLinuxに移植しようとしています。 ライブラリプロジェクトの1つでは、宣言されていてどこにも定義されていないか、どこでも使用されている関数がいくつかあります。 EX用 :私は、Linuxで作るのですかしようとすると、GCC&CMAKEで未使用の未定義参照を解決する方法
int fun_a();
int fun_unsed() /*This function is never used in project*/
{
fun_a();
}
は今、私は宣言された関数に未定義の参照を観察しています。同じコードが同じCMAKEファイルでMSVCで動作します。
私は自分の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
申し訳ありません、私は 'make VERBOSE = 1'を意味しました。あなたの 'CMakeLists.txt'の内容は、次の点を除いて妥当なものです:1. * GCC_COVERAGE_LINK_FLAGS *変数**を2回**に設定して、2番目の割り当てが最初のものを上書きするようにします。 2.最初の割り当てでは、値の先頭にダッシュを追加する必要があります: '--unresolved-symbols = ...'。 – Tsyvarev