cmake クロスコンパイラ プロジェクトで奇妙な問題が発生しています。
自分のライブラリは見つかりましたが、ツールチェーンの (システム) ライブラリは見つかりませんでした。
以前は、debian スクイーズ マシンで KDevelop を使用していました。現在、debian wheezy を搭載した新しいマシンで構成に失敗しています。m
やのようなシステム ライブラリは見つかりませんpthread
。
私の古いマシンでは、以下は完全に機能していましたが、これを機能させるために何か特別なことをしたことを覚えていません。
ここに私のCMakeLists.txt
ファイルの1つがあります
cmake_minimum_required(VERSION 2.8)
SET(CMAKE_SYSTEM_NAME Linux)
SET(CMAKE_SYSTEM_VERSION 2.6.36.4)
SET(CMAKE_C_COMPILER arm-angstrom-linux-gnueabi-gcc)
SET(CMAKE_CXX_COMPILER arm-angstrom-linux-gnueabi-g++)
include_directories(../include
../../../sample/include)
project(testmain)
add_executable(testmain
some_c-source-file.c)
set(CMAKE_LIBRARY_PATH ../lib/arm-26/lib
../../../sample/lib/arm-26/lib)
find_library(LIBS_TEST NAMES akku)
find_library(LIBS_M NAMES m)
find_library(LIBS_PTHREAD NAMES pthread )
target_link_libraries(akkumain
${LIBS_TEST}
${LIBS_M}
${LIBS_PTHREAD})
set(CMAKE_C_FLAGS "-Wall -Werror")
set(CMAKE_C_FLAGS_DEBUG "-g3 -O2 -rdynamic")
set(CMAKE_C_FLAGS_RELEASE "-g0 -O0")
set(CMAKE_CXX_FLAGS "-Wall -Werror")
set(CMAKE_CXX_FLAGS_DEBUG "-g3 -O2 -rdynamic")
set(CMAKE_CXX_FLAGS_RELEASE "-g0 -O0")
これは、KDevelop を使用してコンパイルしようとしたときに表示されるメッセージです: (繰り返しますが、これは私の古いマシンで動作していました)
/home/user/testmain/build> /usr/bin/cmake -DCMAKE_BUILD_TYPE=Debug /home/user/testmain/
-- The C compiler identification is GNU 4.3.3
-- The CXX compiler identification is GNU 4.3.3
-- Check for working C compiler: /usr/local/angstrom/arm/bin/arm-angstrom-linux-gnueabi-gcc
-- Check for working C compiler: /usr/local/angstrom/arm/bin/arm-angstrom-linux-gnueabi-gcc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/local/angstrom/arm/bin/arm-angstrom-linux-gnueabi-g++
-- Check for working CXX compiler: /usr/local/angstrom/arm/bin/arm-angstrom-linux-gnueabi-g++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
CMake Error: The following variables are used in this project, but they are set to NOTFOUND.
Please set them or make sure they are set and tested correctly in the CMake files:
LIBS_M
linked by target "akkumain" in directory /home/user/testmain
LIBS_PTHREAD
linked by target "akkumain" in directory /home/user/testmain
したがって、LIBS_TEST が見つかります。しかし、そうではありませlibm
んlibpthread
。さまざまなプロジェクトでこれを試しました。すべてのライブラリが見つかりましたが、「システム」ライブラリは見つかりませんでした。
私はすでに次のようなさまざまなことを試しました
set(CMAKE_FIND_LIBRARY_PREFIXES lib )
set(CMAKE_FIND_LIBRARY_SUFFIXES .a )
そして、覚えていないことがいくつかあります。
ディレクトリを手動で指定したときに機能する唯一のことは次のとおりです。
find_library(ASTLIBS_M NAMES m PATHS /usr/local/angstrom/arm/arm-angstrom-linux-gnueabi/usr/lib)
これを指定した後CMakeLists.txt
、ライブラリが見つかり、エラーなしでプロジェクトをコンパイルできます。
しかし、これは私が望んでいるものではありません。なぜなら、私にはたくさんのプロジェクトと多くのライブラリがあり、すべてを編集したくないからですCMakeLists.txt
... :(
IDE/CMake ファイル内で特別なことを何も指定せずに、私の古いマシンがシステム ライブラリを見つけた理由を知っている人はいますか?
編集: 実行ファイルの 1 つで、Linker ステージで glibc からいくつかのシンボルが見つからないというエラーがスローされることに気付きました - 私の debian wheezy システムにはもっと問題があるようです。- 私はそれを理解できるといいのですが...
編集: