我在Mint Linux安装上编译了一些编译错误。
错误是所有版本不匹配问题。
以下是“制作错误”的一部分:
/usr/bin/ld: warning: libthread.so.1, needed by /home/lynton/Backup/Logosworld/IBM/Websphere MQ for Solaris x86 64bit/CZRV9ML/mqm/root/opt/mqm/lib64/libmqm.so, not found (try using -rpath or -rpath-link)
/usr/bin/ld: warning: libsocket.so.1, needed by /home/lynton/Backup/Logosworld/IBM/Websphere MQ for Solaris x86 64bit/CZRV9ML/mqm/root/opt/mqm/lib64/libmqm.so, not found (try using -rpath or -rpath-link)
/usr/bin/ld: warning: libc.so.1, needed by /home/lynton/Backup/Logosworld/IBM/Websphere MQ for Solaris x86 64bit/CZRV9ML/mqm/root/opt/mqm/lib64/libmqm.so, not found (try using -rpath or -rpath-link)
/usr/bin/ld: warning: libdl.so.1, needed by /home/lynton/Backup/Logosworld/IBM/Websphere MQ for Solaris x86 64bit/CZRV9ML/mqm/root/opt/mqm/lib64/libmqm.so, not found (try using -rpath or -rpath-link)
/home/lynton/Backup/Logosworld/IBM/Websphere MQ for Solaris x86 64bit/CZRV9ML/mqm/root/opt/mqm/lib64/libmqm.so: undefined reference to `xihThreadKey'
/home/lynton/Backup/Logosworld/IBM/Websphere MQ for Solaris x86 64bit/CZRV9ML/mqm/root/opt/mqm/lib64/libmqm.so: undefined reference to `xcsCreateThreadMutexSemX'
/home/lynton/Backup/Logosworld/IBM/Websphere MQ for Solaris x86 64bit/CZRV9ML/mqm/root/opt/mqm/lib64/libmqm.so: undefined reference to `thr_getspecific'
/home/lynton/Backup/Logosworld/IBM/Websphere MQ for Solaris x86 64bit/CZRV9ML/mqm/root/opt/mqm/lib64/libmqm.so: undefined reference to `xcsReleaseThreadMutexSem'
/home/lynton/Backup/Logosworld/IBM/Websphere MQ for Solaris x86 64bit/CZRV9ML/mqm/root/opt/mqm/lib64/libmqm.so: undefined reference to `xcsRequestThreadMutexSem'
collect2: ld returned 1 exit status
make: *** [idoclink_outbound] Error 1
例如,它抱怨“libsocket.so.1”,但我只有“libsocket.so.0”?
C开发人员通常如何解决这类问题?有什么方法可以下载它抱怨的那些特定库吗?
感谢您的帮助; - )
林顿
答案 0 :(得分:4)
你正在尝试编译在Linux上为Solaris编写的代码,并且构建系统和代码都没有被正确地条件化以便这样做。线索1是构建目录的名称 -
.../Websphere MQ for Solaris x86 64bit/...
线索二,它似乎已经硬连接了一堆特定于Solaris的动态库名称(据我所知,Linux并没有有 libthread或libsocket,以及它的libc和libdl不要使用那些sonames - 我不知道你在哪里得到libsocket.so.0
,但它可能与这个程序正在寻找的东西完全不同)并且线索三是
libmqm.so: undefined reference to `thr_getspecific'
其中thr_getspecific
是一个绝对不可移植的特定于Solaris的库例程(可移植的等价物是pthread_getspecific
,但移植不仅仅是更改代码中的名称。)
回到你获得代码的地方,看看他们是否有Linux版本。如果他们不这样做,你可能会有很多工作要做。
答案 1 :(得分:0)
WebSphere MQ库随服务器或客户端安装一起提供。 C开发人员通常通过实际安装WMQ软件来解决这类问题。即使假设您设法获得正确的WMQ库未压缩,如果它们未安装到预期位置,您将有一个糟糕的时间进行编译。例如,WMQ消息目录安装在NLS目录中,并在编译期间引用。您可以使用指向每个库的编译器选项来解决所有依赖关系,但是安装软件会更快更容易。
如果您需要的是客户端库,可以免费下载SupportPac MQC7,但需要注册。如果您需要服务器库,则需要购买WMQ Server或downloaded the trial。主要区别在于服务器库可以使用共享内存连接到本地QMgr,客户端库始终通过网络连接。如果您需要XA事务性,那么无论您如何连接,都需要服务器许可证。 XA功能是WMQ服务器分发的一部分,并在使用它的每个节点上产生许可证义务。
安装完成后,您应该能够编译程序,假设您拥有所有的先决条件库,例如正确的libstdc ++。这些要求在WMQ Detailed System Requirements页面的每个平台上列出。最后,有关如何在Infocenter主题上为Linux上的WebSphere MQ构建程序的详细说明,恰当地命名为Building your application on Linux。本节提供了示例编译命令,库路径要求等。