这是针对UNIX操作系统的特定答案,如果对您的问题没有意义,我很抱歉,但我不太了解您的平台。只是不要创建动态链接的可执行文件。
我有两种方法可以做到这一点。方法#2可能最适合你。他们都很相似。
的 重要 强> 两者都是可执行文件 的 必须 强> 用静态编译 -static 在建设时
-static
手动 dlopen 您需要通过完整路径的每个库,然后通过获取功能地址 dlsym 在运行时将它们分配给函数指针以使用它们。您需要为要使用的每个外部函数执行此操作。我相信重入的不安全函数不会喜欢这样,所以对于那些使用静态变量的人 - 你需要使用可重入的安全版本,这些版本以“_r”结尾,即使用 strtok_r 代替 strtok
dlopen
dlsym
strtok_r
strtok
这将是困难或简单的,具体取决于您的应用程序的功能以及您正在使用的功能数量。
您可以通过链接静态可执行文件来解决您的subversion问题,以避免使用动态库。这将产生比它更大的exe dlopen()/dlsym() 方法。使用构建 -static 例如,编译标志而不是使用 gcc bah.c -o bah lssl 使用 gcc -static bah.c -o bah /usr/lib/libssl.a 使用您需要的静态编译版本的库而不是动态共享库。换句话说,使用 -static 并且不要使用 -l 建设时
dlopen()/dlsym()
gcc bah.c -o bah lssl
gcc -static bah.c -o bah /usr/lib/libssl.a
-l
无论哪种方法:
file bah
ldd
.a
.so
每种方法都有其优缺点,可根据您的需求而定。
采取方法1 dlopen 和 dlsym 方法使你的代码更“模糊”和更小,但在大多数情况下牺牲可移植性,所以可能不是你想要的。好处是,当安全漏洞在系统范围内固定时,它可能会受益。