1. Python打包
pyinstaller -F 项目主文件(或者是单一脚本)
参数说明:
-F:打包所有的依赖包在一个bin文件中,包括你自己的模块、内置模块以及第三方模块。
-c:如果你是命令行窗口,就要加上这个参数。
-w:窗口程序,比如你用了PyQt。
2. C++打包
参考链接:https://www.cnblogs.com/52php/p/5681711.html
在linux中,静态库为lib*.a,动态库为lib*.so,静态库可移植性大,动态库可移植性小。假如我们现在有test.cpp和add.cpp两个文件,test.cpp依赖add.cpp。
test.cpp:
#include <iostream>
#include "./addlib/add.h"
using namespace std;
int main()
{
int number1 = 10;
int number2 = 90;
cout << "the result is " << add(number1, number2) << endl;
return 0;
}
add.h:
#ifndef _ADD_H
#define _ADD_H
#include <iostream>
int add(int a, int b);
#endif
add.cpp:
#include "add.h"
#include <iostream>
int add(int a, int b){
return a+b;
}
静态编译
生成静态链接库libadd.a:
g++ -c add.cpp
ar -crv libadd.a add.o
编译目标文件:
g++ -o test test.cpp -L./addlib -ladd
-L是指定加载库文件的路径
-l是指定加载的库文件
动态编译
生成动态链接库libadd.so:
g++ -fPIC -shared -o libadd.so add.cpp
编译目标文件:
g++ -o test test.cpp -L./addlib -ladd
然后在/etc/ld.so.conf加入自己的lib路径,执行一下ldconfig
命令就可以使用动态库啦。
直接链接文件
g++ -o test test.cpp ./addlib/add.cpp
or
g++ -c test.cpp ./addlib/add.cpp
g++ -o test test.o add.o
g++(gcc)编译选项:
-shared :指定生成动态链接库。
-static :指定生成静态链接库。
-fPIC :表示编译为位置独立的代码,用于编译共享库。目标文件需要创建成位置无关码,念上就是在可执行程序装载它们的时候,它们可以放在可执行程序的内存里的任何地方。
-L. :表示要连接的库所在的目录。
-l:指定链接时需要的动态库。编译器查找动态连接库时有隐含的命名规则,即在给出的名字前面加上lib,后面加上.a/.so来确定库的名称。
-Wall :生成所有警告信息。
-ggdb :此选项将尽可能的生成gdb的可以使用的调试信息。
-g :编译器在编译的时候产生调试信息。
-c :只激活预处理、编译和汇编,也就是把程序做成目标文件(.o文件)。
-Wl,options :把参数(options)传递给链接器ld。如果options中间有逗号,就将options分成多个选项,然后传递给链接程序。
3. Java打包
参考链接:https://blog.csdn.net/mouday/article/details/95591230
Hello.java:
public class Hello{
public static void main(String[] args) {
System.out.println("Hello");
}
}
外部指定Main-Class
# 编译成.class 文件
javac Hello.java
# 打包
jar -cvf hello.jar Hello.class
# 执行
java -cp hello.jar Hello
java -classpath hello.jar Hello
内部指定Main-Class
新建META-INF/MANIFEST.MF:
Manifest-Version: 1.0
Created-By: 1.8.0_172 (Oracle Corporation)
Main-Class: Hello
然后:
# 编译成.class 文件
javac Hello.java
# 打包
jar -cvfm hello.jar META-INF/MANIFEST.MF Hello.class
# 执行
java -jar hello.jar
打包参数:
-c 创建一个jar包
-t 显示jar中的内容列表
-x 解压jar包
-u 添加文件到jar包中
-f 指定jar包的文件名
-v 输出详细报告
-m 指定MANIFEST.MF文件
-0 生成jar包时不压缩内容
-M 不生成清单文件MANIFEST.MF
-i 为指定的jar文件创建索引文件
-C 可在相应的目录下执行命令