Dans cet article, j'organiserai les connaissances autour de la construction de deux langages de programmation, C ++ et Java. Plus précisément, nous organiserons la «méthode de construction de base», «l'utilisation de la bibliothèque partagée» et «l'outil de construction» dans chaque langue. À ce moment-là, s'il y a une différence entre Windows et Linux, ce point sera également mentionné.
Le but de la publication de cet article est d'organiser les connaissances par l'affiche lui-même, et le contenu peut contenir des erreurs. Si vous trouvez des erreurs, veuillez les signaler dans les commentaires.
Cette section résume les méthodes de base de construction à partir de la ligne de commande. Décrit comme "build = compile + link".
C++ Supposons que votre projet se compose de trois fichiers: main.cpp, hoge.cpp et hoge.h. Compiler
g++ -c main.cpp hoge.cpp
Le lien est
g++ main.o hoge.o
Cela peut être fait avec la commande, et un fichier exécutable (a.out sous Linux, a.exe sous Windows) est généré. -c est une option "compiler uniquement", et si vous omettez cette option, vous pouvez même générer un fichier exécutable à la fois.
g++ main.cpp hoge.cpp
Java Supposons que votre projet se compose de deux fichiers, Main.java et Hoge.java. Compiler
javac Main.java
Vous pouvez le faire avec la commande, et les fichiers Main.class et Hoge.class seront générés. Les dépendances sont résolues automatiquement, vous n'avez donc pas besoin d'ajouter Hoge.java comme argument. De plus, étant donné que le lien est effectué au moment de l'exécution, il n'est pas nécessaire d'établir un lien explicite avec la commande. Exécution
java Main
C'est fait avec la commande.
Nous expliquerons comment utiliser la bibliothèque partagée en utilisant OpenCV comme exemple. La raison d'utiliser OpenCV comme exemple est qu'il s'agit d'une bibliothèque familière aux affiches, donc si vous n'êtes pas familier avec OpenCV, veuillez la remplacer par une autre bibliothèque et la lire.
C++(Linux) Spécifiez le chemin d'inclusion, le chemin de bibliothèque et le fichier de bibliothèque partagé avec les options g ++. Par exemple, si le chemin d'inclusion: / usr / local / include / opencv4, le chemin de bibliothèque: / usr / local / lib et le fichier de bibliothèque partagée: libopencv_core.so, procédez comme suit.
g++ main.cpp -I/usr/local/include/opencv4 -L/usr/local/lib -lopencv_core
C++(Windows) Pour Windows, spécifiez la bibliothèque d'importation (fichier .lib) avec l'option -l. Si le nom du fichier de bibliothèque d'importation est opencv_world420.lib, générez-le avec la commande suivante.
g++ main.cpp -IC:/opencv/build/include -LC:/opencv/build/x64/lib -lopencv_world420
Au moment de l'exécution, vous devez transmettre le chemin d'accès au fichier .dll (bibliothèque partagée elle-même) qui est associé au fichier .lib. Pour la relation entre les fichiers .lib et les fichiers .dll, les sites suivants peuvent être utiles. http://exlight.net/devel/windows/dll/windll.html
Java(Linux) En Java, le fichier jar joue un rôle similaire à celui de la bibliothèque d'importation ci-dessus, spécifiez donc le fichier jar dans le chemin de classe et construisez comme indiqué ci-dessous.
javac -cp /usr/local/share/java/opencv4/opencv-430.jar Main.java
Ensuite, au moment de l'exécution, vous devez donner le chemin d'accès au fichier .so, qui est le corps principal de la bibliothèque partagée, sous la forme java.library.path. (Je vais omettre l'explication, mais vous devez charger le fichier .so avec la fonction System.loadLibrary également sur le code source) De plus, le chemin de classe est requis au moment de l'exécution et le chemin (.) Du fichier de classe que vous souhaitez exécuter doit également être spécifié.
java -cp .:/usr/local/share/java/opencv4/opencv-430.jar -Djava.library.path=/usr/local/share/java/opencv4 Main
Pour plus de détails, veuillez vous référer à la page suivante. https://stackoverflow.com/questions/28727766/how-to-add-an-external-library-opencv-jar-file-to-the-java-build-path-from-th
Java(Windows) Pour Windows, chargez le fichier .dll au lieu du fichier .so et le délimiteur de chemin de classe sera ";" au lieu de ":".
javac -cp C:/opencv/build/java/opencv-430.jar Main.java
java -cp .;C:/opencv/build/java/opencv-420.jar -Djava.library.path=C:/opencv/build/java/x64 Main
Cette section présente CMake, un outil de construction en langage C, et Gradle, un outil de construction Java.
CMake Avant d'expliquer CMake, parlons de make. make est un pionnier des outils de build, et vous pouvez automatiser les builds en écrivant des règles de build dans votre Makefile.
CMake est souvent utilisé dans la procédure de CMake → make → make install lors de l'installation du code source du langage C. Dans chacune de ces étapes, les tâches suivantes sont effectuées.
Dans l'exemple utilisant OpenCV, CMakeLists.txt a le contenu suivant. (Lorsque vous n'utilisez pas pkg_config)
cmake_minimum_required(VERSION 3.10)
project(Main)
add_executable(Main main.cpp)
target_include_directories(Main
PRIVATE
/usr/local/include/opencv4
)
target_link_libraries(Main
PRIVATE
/usr/local/lib/libopencv_core.so
)
Gradle Quant à Gradle, je ne mettrai que le contenu de build.gradle comme mon propre mémo.
apply plugin: 'java'
dependencies {
compile files("/usr/local/share/java/opencv4/opencv-430.jar")
}
Dans cet article, j'ai organisé les connaissances autour de la construction de deux langages de programmation, C ++ et Java. À l'origine, j'allais aborder le processus de construction qui est caché dans l'EDI, mais je ne suis pas sûr que ce soit plus nécessaire, alors j'aimerais terminer ici. En conséquence, le contenu est similaire à l'article d'il y a 20 ans, mais j'apprécierais que vous y fassiez référence.
Recommended Posts