0

私はチュートリアルに取り組んでおり、最も難しい部分に到達するまで大きな進歩を遂げていました. チュートリアルはUsing CMake: Hello World Exampleです。最後の最も難しい部分は、「ライブラリとプログラムを別々にビルドする」セクションです。Eclipse で 2 つのプロジェクトを作成し、最後まで指示に従いました。ライターは、CMake のビルドを成功させるために、まだやるべきことがあるというヒントを与えています。その間、両方のプロジェクトを Eclipse で相互に連携させたいと考えています。

すべてをビルドしようとすると、次のエラーが表示されます。

12:25:45 **** Build of configuration Debug for project Hello ****
make all 
Building file: ../src/hello/Hello.cpp
Invoking: GCC C++ Compiler
g++ -I"/Users/pdl/Development/HelloWorld/Namer/src/namer" -include"/Users/pdl/Development/HelloWorld/Namer/src/namer/World.h" -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/hello/Hello.d" -MT"src/hello/Hello.d" -o "src/hello/Hello.o" "../src/hello/Hello.cpp"
Finished building: ../src/hello/Hello.cpp

Building target: Hello
Invoking: MacOS X C++ Linker
g++ -L"/Users/pdl/Development/HelloWorld/Namer" -o "Hello"  ./src/hello/Hello.o   -l"/Users/pdl/Development/HelloWorld/Namer/src/namer/World.h"
ld: library not found for -l/Users/pdl/Development/HelloWorld/Namer/src/namer/World.h
collect2: ld returned 1 exit status
make: *** [Hello] Error 1

12:25:45 Build Finished (took 161ms)

問題は次のとおりです。

4 duplicate symbols for architecture x86_64
library not found for -l/Users/pdl/Development/HelloWorld/Namer/src/namer/World.h
make: ***[Hello] Error 1
make: ***[Namer] Error 1

ライブラリ プロジェクト (Namer) だけをビルドしようとすると、次のエラーが表示されます。

12:36:11 **** Incremental Build of configuration Debug for project Namer ****
make all 
Building target: Namer
Invoking: MacOS X C++ Linker
g++  -o "Namer"  ./src/namer/CMakeFiles/2.8.11.2/CompilerIdCXX/CMakeCXXCompilerId.o  ./src/namer/CMakeFiles/2.8.11.2/CompilerIdC/CMakeCCompilerId.o  ./src/namer/World.o   
duplicate symbol _main in:
    ./src/namer/CMakeFiles/2.8.11.2/CompilerIdCXX/CMakeCXXCompilerId.o
    ./src/namer/CMakeFiles/2.8.11.2/CompilerIdC/CMakeCCompilerId.o
duplicate symbol _info_compiler in:
    ./src/namer/CMakeFiles/2.8.11.2/CompilerIdCXX/CMakeCXXCompilerId.o
    ./src/namer/CMakeFiles/2.8.11.2/CompilerIdC/CMakeCCompilerId.o
duplicate symbol _info_platform in:
    ./src/namer/CMakeFiles/2.8.11.2/CompilerIdCXX/CMakeCXXCompilerId.o
    ./src/namer/CMakeFiles/2.8.11.2/CompilerIdC/CMakeCCompilerId.o
duplicate symbol _info_arch in:
    ./src/namer/CMakeFiles/2.8.11.2/CompilerIdCXX/CMakeCXXCompilerId.o
    ./src/namer/CMakeFiles/2.8.11.2/CompilerIdC/CMakeCCompilerId.o
ld: 4 duplicate symbols for architecture x86_64
collect2: ld returned 1 exit status
make: *** [Namer] Error 1

12:36:11 Build Finished (took 61ms)

問題は次のとおりです。

4 duplicate symbols for architecture x86_64
make: ***[Namer] Error 1

私を助けてくれる人はいますか?これは、Hello 部分がメイン プロジェクトに由来し、名前が Library プロジェクトに由来する、簡単な HelloWorld の例であるはずです。Eclipse で複数の C++ プロジェクトを構成する方法を理解している人にとっては、おそらく簡単です。CMake が Eclipse と戦っているのかもしれませんが、わかりません。

よろしくお願いいたします。

--------------------------------------------ソースコード---- ------------------------------

わかった。Hello プロジェクトには、CMakeLists.txt ファイルと FindNamer.cmake ファイルがあります。

CMakeLists.txt

cmake_minimum_required(VERSION 2.8.6)
set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}")
find_package(Namer REQUIRED)
include_directories("${Namer_INCLUDE-DIRS}")
add_executable(hello main.cpp)
target_link_libraries(hello ${Namer_LIBRARIES})

FindNamer.cmake

find_path(Namer_INCLUDE_DIRS World.h /usr/include "$ENV{NAMER_ROOT}")

find_library(Namer_LIBRARIES namer /usr/lib "$ENV{NAMER_ROOT}")

set(Namer_FOUND TRUE)

if (NOT Namer_INCLUDE_DIRS)
    set(Namer_FOUND FALSE)
endif (NOT Namer_INCLUDE_DIRS)

if (NOT Namer_LIBRARIES)
    set(Namer_FOUND FALSE)
endif (NOT Namer_LIBRARIES)

そしてHello.cppファイル:

#include <stdio.h>
#include "World.h"

int main() {
  printf("Hello %s\n", getWorld().c_str());
  return 0;
}

Namer プロジェクトにはCMakeLists.txtファイルがあります。

cmake_minimum_required(VERSION 2.8.6)
project(Namer)
include_directories("${CMAKE_SOURCE_DIR}")
add_library(namer World.cpp World.h)

World.cppは次のとおりです。

#include "World.h"

std::string getWorld() { return "Earth"; }

World.hは次のとおりです。

#include <string>

std::string getWorld();

他に必要なものがあればお知らせください。ありがとうございました。

4

0 に答える 0