Oracle C++ linux 和更多奇怪的东西
Posted
技术标签:
【中文标题】Oracle C++ linux 和更多奇怪的东西【英文标题】:Oracle C++ linux and more weird stuff 【发布时间】:2009-11-27 14:09:01 【问题描述】:故事就是这样。我有这个使用 Linux 和更多开源工具的设备(顺便说一句,它是一个 ARM)。我的任务是用它创建一些神奇的收银应用程序。
我已经做到了,现在我的老板提出了新的要求。他想让我把这些东西(设备)连接到远程数据库(最好是 Oracle)。这就是我开始使用轻量版 oracle 即时客户端所做的事情。一切都很好,很酷,直到我运行了我的第一个 hello world:
#include <occi.h>
using namespace oracle::occi;
int main()
Environment *env = Environment::createEnvironment();
Connection *conn = env->createConnection("HR", "password");
env->terminateConnection(conn);
Environment::terminateEnvironment(env);
return 0;
针对occi、clntsh、thread的链接; 并将库搜索路径以及其他内容设置为:“$workspace_loc:/OracleTest/instantclient_10_2”,即保存我的 .so 文件的目录; p>
这里是编译命令:
ucfront-g++ -Wl,-elf2flt="r" -static -o OracleTest ./main.o -locci -lclntsh -lthread -L/usr/local/arm-elf/lib -L"C:\workspace\OracleTest\instantclient_10_2" -L/usr/local/fit-libs/lib
这是错误:
/usr/local/arm-elf/bin/ld.real: cannot find -locci collect2: ld returned 1 exit status
还有几点我想提一下:
1- 我正在运行 windows 并为 linux 编译它,我下载的即时客户端版本适用于 linux x86(不知道这是否可行或者它是否可能是问题的根源)。
2- 我正在使用 eclipse 的修改版本进行开发,专门针对该设备。
3- 我不知道是否应该在编译后将那些 Oracle 库移动到设备中,所以如果有人能给我指导,我将非常感激。
TLDR:我不想编译上面的代码但是链接失败,请帮忙!
编辑:
对于前两个答案,不,我没有找到任何特定的 ARM 库,我认为没有。
如果有人能找到任何类似于 ARM 发行版的东西,我将不胜感激。 有两个 RISC 发行版,但我不知道它们是否与 ARM 兼容:
Instant Client for HP-UX PA-RISC (64-bit)
Instant Client for HP-UX PA-RISC (32-bit)
【问题讨论】:
【参考方案1】:如果您没有 ARM 版本的 Oracle 库,那么您完全不走运,需要获得一个(也许有免费的驱动程序?)或手动实现有线协议。
【讨论】:
【参考方案2】:Erm...是否有适用于 Linux+ARM 的即时客户端(或任何 Oracle 客户端)?我在下载页面上没有看到。
如果没有,您将不得不使用 ODBC,或者其他具有可以编译的开源客户端的数据库。
【讨论】:
【参考方案3】:使用带有 jdbc-driver 的 java 怎么样? Oracle-thin-driver 是纯 java,所以它应该在 arm 上工作。如果您无法编写纯 java-app 并且需要在 arm-device 上使用其他库,则可以使用 java 中的 JNI-calls 来使用 native-arm 库。
【讨论】:
【参考方案4】:如果您在 Windows 机器上运行,我很确定您需要 Windows 版本的 Oracle 客户端。
【讨论】:
如何让它在我正在部署的 linux 中运行?库和编译后的软件之间会有硬依赖吗?【参考方案5】:-
您需要将
-L
参数移到 -l
参数之前。
您需要在设备上运行 ARM 库,而不是 x86 库,不知道 Oracle 是否提供这些库。
您可能不希望设备直接访问数据库。最好在堆栈中放置一个中间层服务器,并让设备与之通信(通过 XML-RPC 或其他 RPC 协议)。
【讨论】:
第三个选项会让我的生活变得更轻松,但是,为什么我不希望设备直接与数据库通信呢? en.wikipedia.org/wiki/Multitier_architecture 基本上它允许独立;允许替换数据库和端点,而无需更改另一个。它恰好避免了您遇到的问题 - 需要为您的设备提供专有库。【参考方案6】:您最好的机会是要么按照 tjin 的建议使用 Java 和 JDBC 驱动程序,要么完全忘记直接连接到数据库的想法;在服务器上创建一个 Web 服务并使用它。
【讨论】:
以上是关于Oracle C++ linux 和更多奇怪的东西的主要内容,如果未能解决你的问题,请参考以下文章
无法使用 gcc 在 Linux 中编译任何 c++ 程序,出现一些奇怪的错误 [重复]
在 C++ 中带有子句和函数的 oracle 的 OTL 问题