以下代码设置 OCI(Oracle 调用接口)环境,必须在尝试连接到数据库之前完成。它在作为普通程序编译和链接时工作正常,但是当我尝试将其打包到 AppImage 中时,OCIEnvCreate()
返回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);
}
}