2016-12-31 5 views
0

Ich finde es schwierig, irgendwas mit libgit2 API in Clion auszuführen. Ich habe alles installiert, mit Homebrew. mit diesem bearbeiten, bevorVerlinkung gegen libgit2 in Clion funktioniert nicht

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

#include <git2.h> funktioniert gut, aber ich kann es nicht zu laufen scheinen.

Ich habe versucht, einige einfache Beispiele, es funktioniert so nicht zu sein scheint i libgit2 besitzt Beispiel von here nehmen entschieden, um zu sehen, ob es funktionieren wird, aber keine gute Nachricht ich die folgenden Fehler

/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 

diese erhalten mein CmakeList.txt in Clion ist

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}) 

ich habe versucht, etwas Hilfe auf libgit2 Seite und änderte mein CmakeList.txt set() zu diesem

012.351.
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 ") 

und ich habe die folgenden Fehler: minimieren i

/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. 

sehen Ich bin neu in libgit2

ich gerade versucht, sich von diesem zu erhalten vertraut und lernen, aber kann nicht scheinen, wie zu arbeiten jede gewöhnliche API, die ich kenne. Alle Hilfe wird geschätzt.

Frohes Neues Jahr !!!

+0

Warum deaktivieren Sie die gemeinsam genutzten Bibliotheken? Wie hast du diese Zeichenfolge gefunden, um 'CMAKE_C_FLAGS' zu setzen? Dies wird im libgit2-Handbuch zum Verknüpfen nicht erwähnt, sie sind nicht die richtigen Pfade, die für Homebrew verwendet werden, und es ist auch nicht so, wie man einem C-Compiler sagt, dass er es verlinken soll. Es scheint, dass Ihre Probleme sehr allgemein sind und dass CMake, ein C-Compiler und Umgebungsvariablen eher als irgendetwas libgit2-spezifisch funktionieren. –

+0

@ CarlosMartínNieto Ich habe die Shared Libraries deaktiviert, weil ich sie als statische nicht dyllib auf Mac haben wollte. Ich habe die Zeichenfolge von der libgit2-Homepage [hier] [https://libgit2.github.com/docs/guides/build-and-link/], ich habe gerade freigegebene Bibliotheken aktiviert und neu installiert und baue alles von Ground Zero, aber ich immer noch get Undefined Symbole für Architektur i386: "_git_blob_lookup", referenziert von: _blob_parsing in main.co –

+0

@ CarlosMartínNieto was schlagen Sie vor, dass ich an dieser Stelle tun? sollte ich es von der Clion-Build-Präferenz verknüpfen, oder ich kann es in der CMakeList.txt-Datei tun. –

Antwort

0

Ich löste das Problem jetzt. Dank @ CarlosMartínNieto, habe ich den falschen Ort gesucht. Ich habe die CMakefileList dazu:

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}) 

ich noch immer für x86_64-Architektur ist verknüpft (i386) Fehler eingebaut, so dass ich die Build-Option in der Clion bevorzugt diese geändert

-D "CMAKE_OSX_ARCHITECTURES:STRING=x86_64" 

Und jetzt funktioniert alles jetzt. Ich denke, ich werde jetzt mehr Spaß mit der libgit2-API haben. Vielen Dank.