2

これが私の設定のコンパイラ部分です:

IF(UNIX)
    ## Compiler flags

    # specify the cross compiler
    SET(CMAKE_C_COMPILER   /home/username/projects/buildroot/output/host/usr/bin/arm-linux-gcc)
    SET(CMAKE_CXX_COMPILER /home/username/projects/buildroot/output/host/usr/bin/arm-linux-g++)

    if(CMAKE_COMPILER_IS_GNUCXX)
        set(CMAKE_CXX_FLAGS "-O3")
        set(CMAKE_EXE_LINKER_FLAGS "-lsqlite3 -lrt -lpthread")
    endif()

    target_link_libraries(complex
      ${Boost_FILESYSTEM_LIBRARY}
      ${Boost_SYSTEM_LIBRARY})
ENDIF(UNIX)

3つの問題があります:-lsqlite3 -lrt -lpthread

自分のアーキテクチャ用にそれらを作成し、ここで指定するにはどうすればよいですか?どういうわけか私のアーキテクチャのためにそれらを再コンパイルした後、コンパイルされたライブラリのパスを設定する方法(setを使用しますか?)?

4

2 に答える 2

5

CMakeとのクロスコンパイルを行いたい場合は、実際にはそのためのツールチェーンファイルを使用する必要があります。紹介については、 CMakeWikiを参照してください。サードパーティのライブラリ(つまり、クロスコンパイルツールチェーンに含まれていない)を使用するには、それらもクロスコンパイルする必要があります。

編集:buildrootツールチェーンを使用しているので、すでに含まれているCMakeツールチェーンファイルを使用できます。-DCMAKE_TOOLCHAIN_FILE=/home/username/projects/buildroot/output/toolchainfile.cmakeCMakeを呼び出すときにパスするだけです。ファイルに設定する必要はありませCMAKE_C_COMPILERん。また、設定とは非常に悪い習慣と見なされます。CMAKE_CXX_COMPILERCMakeLists.txtCMAKE_CXX_FLAGSCMAKE_EXE_LINKER_FLAGS

おそらく、buildrootツールチェーンの構築中にsqlite3を構築したので、他のライブラリと同じように使用できます。すなわち:

find_path(SQLITE3_INCLUDE_DIR sqlite3.h)
find_library(SQLITE3_LIBRARY sqlite3)
if(NOT SQLITE3_INCLUDE_DIR)
  message(SEND_ERROR "Failed to find sqlite3.h")
endif()
if(NOT SQLITE3_LIBRARY)
  message(SEND_ERROR "Failed to find the sqlite3 library")
endif()

find_package(Threads REQUIRED)

# ...

target_link_libraries(complex
  ${Boost_FILESYSTEM_LIBRARY}
  ${Boost_SYSTEM_LIBRARY}
  ${SQLITE3_LIBRARY}
  ${CMAKE_THREAD_LIBS_INIT}
  rt)

CMAKE_CXX_FLAGS最後に、に設定しないでください-O3-DCMAKE_BUILD_TYPE=Release代わりに、ユーザーはプロジェクトを構成するときに合格する必要があります。

于 2012-04-25T12:09:42.860 に答える
2

依存関係もクロスコンパイルする必要があります。パスは、それらをインストールする場所によって異なります。

ところで、使用-lpthreadはPOSIXスレッドを取得する安全な方法ではありません。-pthreadコンパイラとリンカの両方にオプションを与える必要があります。

于 2012-04-25T11:57:35.837 に答える