可执行文件打包记录

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 可在相应的目录下执行命令

打赏一个呗

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦