2016-12-31 7 views
0

Clion에서 libgit2 API를 사용하여 아무 것도 실행하기가 어렵습니다. Homebrew를 사용하여 필요한 모든 것을 설치했습니다. 이 편집을하기 전에Clion에서 libgit2와의 연결이 작동하지 않음

args = std_cmake_args 
    ... 
    args << "-DBUILD_SHARED_LIBS=OFF" 

#include <git2.h> 잘 작동하지만 실행하지 못할 수도 있습니다.

는 나는 내가 libgit2가 작동되는지 확인 here에서 예를 소유하기로 결정하지만 좋은 소식 내가 다음과 같은 오류를

/Applications/CLion.app/Contents/bin/cmake/bin/cmake --build /Users/addo/ClionProjects/Libgit2Training/cmake-build-debug --target Libgit2Training -- -j 4 [ 50%] Building C object CMakeFiles/Libgit2Training.dir/main.c.o [100%] Linking C executable Libgit2Training Undefined symbols for architecture i386: "_git_blob_lookup", referenced from: 
     _blob_parsing in main.c.o "_git_blob_rawcontent", referenced from: 
     _blob_parsing in main.c.o "_git_blob_rawsize", referenced from: 
     _blob_parsing in main.c.o "_git_commit_author", referenced from: 
     _commit_parsing in main.c.o 
     _revwalking in main.c.o "_git_commit_committer", referenced from: 
     _commit_parsing in main.c.o "_git_commit_create_v", referenced from: 
     _commit_writing in main.c.o "_git_commit_free", referenced from: 
     _commit_parsing in main.c.o 
     _tag_parsing in main.c.o 
     _revwalking in main.c.o "_git_commit_id", referenced from: 
     _commit_parsing in main.c.o "_git_commit_lookup", referenced from: 
     _commit_writing in main.c.o 
     _commit_parsing in main.c.o 
     _revwalking in main.c.o "_git_commit_message", referenced from: 
     _commit_parsing in main.c.o 
     _revwalking in main.c.o "_git_commit_parent", referenced from: 
     _commit_parsing in main.c.o "_git_commit_parentcount", referenced from: 
     _commit_parsing in main.c.o "_git_commit_time", referenced from: 
     _commit_parsing in main.c.o "_git_config_get_int32", referenced from: 
     _config_files in main.c.o "_git_config_get_string", referenced from: 
     _config_files in main.c.o "_git_config_open_ondisk", referenced from: 
     _config_files in main.c.o "_git_index_entrycount", referenced from: 
     _index_walking in main.c.o "_git_index_free", referenced from: 
     _index_walking in main.c.o "_git_index_get_byindex", referenced from: 
     _index_walking in main.c.o "_git_libgit2_init", referenced from: 
     _main in main.c.o "_git_libgit2_shutdown", referenced from: 
     _main in main.c.o "_git_object_free", referenced from: 
     _tree_parsing in main.c.o "_git_object_type2string", referenced from: 
     _object_database in main.c.o 
     _tag_parsing in main.c.o "_git_odb_object_data", referenced from: 
     _object_database in main.c.o "_git_odb_object_free", referenced from: 
     _object_database in main.c.o "_git_odb_object_size", referenced from: 
     _object_database in main.c.o "_git_odb_object_type", referenced from: 
     _object_database in main.c.o "_git_odb_read", referenced from: 
     _object_database in main.c.o "_git_odb_write", referenced from: 
     _object_database in main.c.o "_git_oid_fmt", referenced from: 
     _oid_parsing in main.c.o 
     _object_database in main.c.o 
     _commit_writing in main.c.o 
     _commit_parsing in main.c.o 
     _reference_listing in main.c.o "_git_oid_fromstr", referenced from: 
     _oid_parsing in main.c.o 
     _commit_writing in main.c.o 
     _commit_parsing in main.c.o 
     _tag_parsing in main.c.o 
     _tree_parsing in main.c.o 
     _blob_parsing in main.c.o 
     _revwalking in main.c.o 
     ... "_git_reference_list", referenced from: 
     _reference_listing in main.c.o "_git_reference_lookup", referenced from: 
     _reference_listing in main.c.o "_git_reference_symbolic_target", referenced from: 
     _reference_listing in main.c.o "_git_reference_target", referenced from: 
     _reference_listing in main.c.o "_git_reference_type", referenced from: 
     _reference_listing in main.c.o "_git_repository_free", referenced from: 
     _main in main.c.o "_git_repository_index", referenced from: 
     _index_walking in main.c.o "_git_repository_odb", referenced from: 
     _object_database in main.c.o "_git_repository_open", referenced from: 
     _main in main.c.o "_git_revwalk_free", referenced from: 
     _revwalking in main.c.o "_git_revwalk_new", referenced from: 
     _revwalking in main.c.o "_git_revwalk_next", referenced from: 
     _revwalking in main.c.o "_git_revwalk_push", referenced from: 
     _revwalking in main.c.o "_git_revwalk_sorting", referenced from: 
     _revwalking in main.c.o "_git_signature_new", referenced from: 
     _commit_writing in main.c.o "_git_strarray_free", referenced from: 
     _reference_listing in main.c.o "_git_tag_lookup", referenced from: 
     _tag_parsing in main.c.o "_git_tag_message", referenced from: 
     _tag_parsing in main.c.o "_git_tag_name", referenced from: 
     _tag_parsing in main.c.o "_git_tag_target", referenced from: 
     _tag_parsing in main.c.o "_git_tag_target_type", referenced from: 
     _tag_parsing in main.c.o "_git_tree_entry_byindex", referenced from: 
     _tree_parsing in main.c.o "_git_tree_entry_byname", referenced from: 
     _tree_parsing in main.c.o "_git_tree_entry_name", referenced from: 
     _tree_parsing in main.c.o "_git_tree_entry_to_object", referenced from: 
     _tree_parsing in main.c.o "_git_tree_entrycount", referenced from: 
     _tree_parsing in main.c.o "_git_tree_lookup", referenced from: 
     _commit_writing in main.c.o 
     _tree_parsing in main.c.o "_giterr_last", referenced from: 
     _check_error in main.c.o ld: symbol(s) not found for architecture i386 clang: error: linker command failed with exit code 1 (use -v to see invocation) make[3]: *** [Libgit2Training] Error 1 make[2]: *** [CMakeFiles/Libgit2Training.dir/all] Error 2 make[1]: *** [CMakeFiles/Libgit2Training.dir/rule] Error 2 make: *** [Libgit2Training] Error 2 

이를 얻을 그렇게 작동하지 않는 것, 몇 가지 간단한 예를 시도 Clion

cmake_minimum_required(VERSION 3.6) 
project(Libgit2Training) 

#set(CMAKE_CXX_STANDARD 11) 
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -std=c11 ") 



set(SOURCE_FILES main.c) 
add_executable(Libgit2Training ${SOURCE_FILES}) 

내 CmakeList.txt은 내가 libgit2 페이지에 도움을 시도하고이

012,351,641 내 CmakeList.txt 세트를() 변경
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -std=c11 
     CFLAGS += -I/usr/local/Cellar/libgit2/include 
     LDFLAGS += -L/usr/local/Cellar/libgit2/binaries 
     LIBRARIES += -lgit2 ") 

나는 다음과 같은 오류가있어 : 내가 난 그냥 익숙해이로부터 배우려고 노력하고 있지만처럼 작동하지 수

libgit2에 새로운 오전

/Applications/CLion.app/Contents/bin/cmake/bin/cmake --build /Users/addo/ClionProjects/Libgit2Training/cmake-build-debug --target Libgit2Training -- -j 4 
[ 50%] Building C object CMakeFiles/Libgit2Training.dir/main.c.o 
[100%] Linking C executable Libgit2Training 
clang: error: no input files 
make[3]: *** [Libgit2Training] Error 1 
make[2]: *** [CMakeFiles/Libgit2Training.dir/all] Error 2 
make[1]: *** [CMakeFiles/Libgit2Training.dir/rule] Error 2 
make: *** [Libgit2Training] Error 2 

seemed not to parse in a .c file. 

를 참조 최소화 내가 아는 일반 API. 모든 도움을 주실 수 있습니다.

새해 복 많이 받으세요 !!!

+0

왜 공유 라이브러리를 사용 중지 하시겠습니까? 어떻게하면 CMAKE_C_FLAGS로 설정할 수있는 문자열이 생겼습니까? 이것은 libgit2 링크 가이드에서 언급하지 않았지만, Homebrew에 사용할 올바른 경로는 아니며, C 컴파일러에 연결하는 방법을 말하는 것이 아닙니다. 그것은 당신의 문제가 매우 일반적이고 Cake와 C 컴파일러 및 환경 변수가 libgit2에 특정한 것이 아니라 어떻게 작동하는지에 대한 것입니다. –

+0

@ CarlosMartínNieto 나는 Mac에서 dyllib가 아닌 정적 라이브러리로 사용하기를 원했기 때문에 공유 라이브러리를 비활성화했습니다. 나는 libgit2 홈페이지 [here] [https://libgit2.github.com/docs/guides/build-and-link/]에서 문자열을 얻었는데, 공유 라이브러리를 활성화하고 다시 설치하고 제로에서부터 모든 것을 만들었지 만 여전히 get i386 아키텍처에 대한 정의되지 않은 기호 : "_git_blob_lookup", 참조 대상 : main.co의 _blob_parsing –

+0

@ CarlosMartínNieto이 시점에서 무엇을 제안합니까? Clion 빌드 환경 설정에서 연결해야합니까 아니면 CMakeList.txt 파일에서 할 수 있습니다. –

답변

0

지금 문제가 해결되었습니다. @ CarlosMartínNieto 덕분에, 나는 잘못된 장소를보고있었습니다. 나는이에 CMakefileList을 변경 :

cmake_minimum_required(VERSION 3.6) 
project(Libgit2Training) 

#set(CMAKE_CXX_STANDARD 11) 
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -std=c11 -L/opt/local/lib -lgit2 -lssh2") 
/opt/local/lib # for macports 
set(SOURCE_FILES main.c) 
add_executable(Libgit2Training ${SOURCE_FILES}) 
내가이에 Clion 우선 빌드 옵션을 변경할 수 있도록 나는 아직도 x86_64의 아키텍처 인 링크 (I386) 에러를 지어지고 있었다

-D "CMAKE_OSX_ARCHITECTURES:STRING=x86_64" 

이제 모든 것이 작동합니다. 이제 libgit2 API로 더 재미있을 것 같습니다. 감사.

관련 문제