Ich bin neu in C-Entwicklung.Verknüpfung, Kompilieren und Ausführen eines C-Programms mit einer statischen Bibliothek
A I eine Bibliothek errichtet (statisch) in CLION
library.h
#ifndef MYLIB_LIBRARY_H
#define MYLIB_LIBRARY_H
int add(int a, int b);
int sub(int a, int b);
#endif
library.c
#include "library.h"
#include <stdio.h>
int add(int a, int b) {
return a + b;
}
int sub(int a, int b) {
return a - b;
}
CMakeLists.txt
cmake_minimum_required(VERSION 3.6)
project(MyLib)
set(CMAKE_C_STANDARD 99)
set(SOURCE_FILES library.c library.h)
add_library(MyLib ${SOURCE_FILES})
B. Erstellt C Executable Projekt namens App und kopiert libMyLib.a
in lib von App.
main.c
#include <stdio.h>
#include "library.h" // error
int main() {
printf("Hello, World!\n", add(1, 2)); // error
return 0;
}
CMakeLists.txt des Projekts App und angegebenen Ordner für den Linker.
cmake_minimum_required(VERSION 3.6)
project(App)
set(CMAKE_C_STANDARD 99)
set(SOURCE_FILES main.c)
link_directories(${PROJECT_SOURCE_DIR}/lib)
add_executable(App ${SOURCE_FILES})
Frage. Wie kann ich mein Programm mit der statischen Bibliothek arbeiten lassen?
Danke, es hat funktioniert. Ich habe eine andere Frage, was sind die Konventionen für die Verteilung Ihrer Bibliothek.Wie Leute Bibliotheken von Drittanbietern erwarten, scheint ich '.a' und' .h' Dateien zusammen zu verteilen. Sollte ich auch 'libMyLib.a' und' library.h' im Include-Ordner platziert haben? –
ein Vorschlag bitte? –
Ich habe keine Erfahrung beim Verteilen von Bibliotheken, aber ich denke, die Konvention hat lib/Verzeichnis für '.a' und' .so' Dateien und ein Include-Verzeichnis für '.h' Dateien. Sie können auch eine Dokumentation und Tests für die Bibliothek hinzufügen. Hier ist ein Link zum jsoncpp-Bibliotheksrepo, der cmake verwendet: https://github.com/open-source-parsers/jsoncpp. Sie stellen die Quelldateien und Headerdateien bereit, die zum Erstellen der Bibliothek benötigt werden, und der Endbenutzer ist derjenige, der sie mit cmake/make erstellt. – Jay