0
私は、この問題を克服して、私が分かりかねるまで、私はcmakeをかなりよく理解していると思った。私はCで静的ライブラリを構築しましたが、C++で単体テストを実行しようとしていますが、そのライブラリの静的関数のいずれにもリンクできないようです。cmakeのC libにC++ exeをリンクする
CMakeLists.txt:私は、以下のスケルトンプロジェクトで問題を再現しました
cmake_minimum_required(VERSION 3.6)
project(myproj)
add_library(mylib STATIC mylib.c)
find_package(Boost 1.64.0 COMPONENTS unit_test_framework)
add_executable(mytestapp mytest.cpp)
target_include_directories(mytestapp PRIVATE .)
target_link_libraries(mytestapp mylib)
enable_testing()
add_test(mytest mytestapp)
mylib.c:
int add(int a, int b)
{
return a + b;
}
mylib.h
int add(int a, int b);
のMyTest。 cpp:
#define BOOST_TEST_MODULE mylib_test
#include <boost/test/included/unit_test.hpp>
#include "mylib.h"
BOOST_AUTO_TEST_CASE(mylib_test)
{
BOOST_TEST(add(2,2) == 4);
}
はその後、私の出力は次のようになります。
$ make
Scanning dependencies of target mylib
[ 25%] Building C object CMakeFiles/mylib.dir/mylib.c.o
[ 50%] Linking C static library libmylib.a
[ 50%] Built target mylib
Scanning dependencies of target mytestapp
[ 75%] Building CXX object CMakeFiles/mytestapp.dir/mytest.cpp.o
[100%] Linking CXX executable mytestapp
CMakeFiles/mytestapp.dir/mytest.cpp.o: In function `mylib_test::test_method()':
mytest.cpp:(.text+0x1e411): undefined reference to `add(int, int)'
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/mytestapp.dir/build.make:96: mytestapp] Error 1
make[1]: *** [CMakeFiles/Makefile2:105: CMakeFiles/mytestapp.dir/all] Error 2
make: *** [Makefile:95: all] Error 2
私はC++でmylib
をコンパイルする場合、それは罰金リンクが、私はCでの巨大なライブラリを持っているので、ないCのそれは私のための問題だと私はしようとしていますboost_test_framework(C++で)を使用してこのlibをロードしてテストします。
可能な複製を( https://stackoverflow.com/questions/12573816/what-is-an-undef-reference-unresolved-external-symbol-error-and-how-do-i-fix) – Olaf
重複していない問題は、言語。私がC++でeverytrhingをしてもうまく動作します。そしてなぜdownvote? – Stewart
明らかに重複しています。理由と答えを理解できない場合は、いくつかの調査を行う必要があります。私たちは教習やデバッグのサービスではありません。そしてそれは言語CやC++とは関係なく、リンクしています。タグをスパムしないでください。 – Olaf