我创建静态库并链接.hoverBorderWrapper > img {
filter: grayscale(100%)
}
.cftoverlay:hover + .hoverBorderWrapper > img {
filter: grayscale(0%)
}
。
我使用静态库编译programm,但programm有一些共享库的依赖
main.cpp
修改
我尝试编译我的程序,它只使用静态库。 libstdc++.so.6 => /usr/lib32/libstdc++.so.6 (0xf75c1000)
libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xf756a000)
libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xf754c000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xf7394000)
libz.so.1 => /lib/i386-linux-gnu/libz.so.1 (0xf7379000)
libssl.so.1.1 => /usr/lib/i386-linux-gnu/libssl.so.1.1 (0xf730b000)
libcrypto.so.1.1 => /usr/lib/i386-linux-gnu/libcrypto.so.1.1 (0xf70a4000)
libev.so.4 => /usr/lib/i386-linux-gnu/libev.so.4 (0xf7094000)
libuv.so.1 => /usr/lib/i386-linux-gnu/libuv.so.1 (0xf706c000)
libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xf704f000)
是我编译的静态库。
libHermite.a
我的输出:
g++ -o HermitesPolynomialCleanLx-x64 main.cpp -static -L/home/mnowak/projects/HermitesPolynomialLxClean/lib -lHermite -lwebsockets -lstdc++ -lpthread -lssl -lcrypto -ldl -luv -lev -lgcc -lc -Wall -Wextra -pedantic -pthread
答案 0 :(得分:1)
如何编译程序,以便动态库链接在我构建的静态库中。
这是不可能的。共享库(实际上)position-independent code,但静态库(通常)没有。另请参阅this回答一个非常相关的问题。
阅读Drapper的论文How To Write Shared Libraries。
我建议像大多数人一样制作共享库,可能链接到其他共享库。有很多很好的理由喜欢共享库。
或(通常不推荐)创建静态库并要求您的用户静态链接其他依赖库(不推荐)。例如link也是你的&他们的可执行文件与-Bstatic
我想,我的程序只使用没有外部依赖的静态库。
这通常是一个错误的愿望(闻起来很糟糕像某些XY problem)。您应该更喜欢系统地使用共享库(出于多种原因,例如阅读Program Library HowTo),就像Linux发行版的大多数程序一样。例如,在我的/usr/bin/
中的6249个可执行文件中,只有一个go-md2man
是静态链接的。
在2018年,静态链接可执行文件的原因很少(通常,只有少数低级系统实用程序在系统崩溃之后需要静态链接才能使用,并且它们大多位于/sbin/
之下)。
libcrypto.so
或libssl.so
中的任何错误更正中获利(例如,当他的Linux时分发正在更新这些)。
(所以我认为静态链接的加密程序本身就存在安全风险)
要处理依赖关系,请使用package manager并释放您的内容,例如一些.deb
package。但是你可能只是传输软件的源代码,它通常更简单(让你的用户重建它)。