Oracle OCI 库在 AppImage 中打包时失败
Oracle OCI library fails when packaged in AppImage
以下代码设置 OCI(Oracle 调用接口)环境,必须在尝试连接到数据库之前完成。当作为普通程序编译和链接时它工作正常,但是当我试图将它打包到 AppImage 中时,OCIEnvCreate()
returns OCI_ERROR
.
如果我设置 LD_LIBRARY_PATH=/usr/lib/oracle/12.2/client64/lib/
AppImage 会按预期工作。显然,AppImage 构建器所做的库欺骗在 Oracle 库上以某种方式失败了。有什么技巧可以让它们在 AppImage 中工作吗?
(设置 LD_LIBRARY_PATH 不是解决方案,因为我试图不必在每个客户端上安装 Oracle 库。)
在 CentOS 8、GCC 8.4.1 和 10.2.1、oracle-instantclient12.2-devel-12.2.0.1.0-1 上测试。x86_64
#include <oratypes.h>
#include <oci.h>
#include <stdio.h>
int main() {
OCIEnv *envhp;
int status;
status = OCIEnvCreate((OCIEnv **)&envhp,
(ub4) OCI_DEFAULT,
(void *)0, (void * (*)(void *, size_t))0,
(void * (*)(void *, void *, size_t))0,
(void (*)(void *, void *))0,
(size_t)0, (void **)0);
if (OCI_ERROR == status) {
printf("Failed: OCIEnvCreate()\n");
} else if (OCI_SUCCESS == status) {
printf("Success: OCIEnvCreate()\n");
} else {
printf("Other return status '%d' from OCIEnvCreate()\n", status);
}
}
appimage 构建器没有自动将所有 OCI 共享库复制到 AppImage。将每个 .so 文件添加到 linuxdeploy
命令行,每个库文件的 --library /path/to/library.so
解决了这个问题。大概是一些 .so->.so 依赖没有被自动过程解决。
以下代码设置 OCI(Oracle 调用接口)环境,必须在尝试连接到数据库之前完成。当作为普通程序编译和链接时它工作正常,但是当我试图将它打包到 AppImage 中时,OCIEnvCreate()
returns OCI_ERROR
.
如果我设置 LD_LIBRARY_PATH=/usr/lib/oracle/12.2/client64/lib/
AppImage 会按预期工作。显然,AppImage 构建器所做的库欺骗在 Oracle 库上以某种方式失败了。有什么技巧可以让它们在 AppImage 中工作吗?
(设置 LD_LIBRARY_PATH 不是解决方案,因为我试图不必在每个客户端上安装 Oracle 库。)
在 CentOS 8、GCC 8.4.1 和 10.2.1、oracle-instantclient12.2-devel-12.2.0.1.0-1 上测试。x86_64
#include <oratypes.h>
#include <oci.h>
#include <stdio.h>
int main() {
OCIEnv *envhp;
int status;
status = OCIEnvCreate((OCIEnv **)&envhp,
(ub4) OCI_DEFAULT,
(void *)0, (void * (*)(void *, size_t))0,
(void * (*)(void *, void *, size_t))0,
(void (*)(void *, void *))0,
(size_t)0, (void **)0);
if (OCI_ERROR == status) {
printf("Failed: OCIEnvCreate()\n");
} else if (OCI_SUCCESS == status) {
printf("Success: OCIEnvCreate()\n");
} else {
printf("Other return status '%d' from OCIEnvCreate()\n", status);
}
}
appimage 构建器没有自动将所有 OCI 共享库复制到 AppImage。将每个 .so 文件添加到 linuxdeploy
命令行,每个库文件的 --library /path/to/library.so
解决了这个问题。大概是一些 .so->.so 依赖没有被自动过程解决。