我有一些示例C代码,我希望这些代码可以适应我的需要。在此之前,我尝试按原样编译示例。 C代码包含#include参考,我可以在'inc'目录中找到.h文件。还有一个对应的“ lib”目录。我正在努力寻找需要编译代码的命令行。
到目前为止,我已经设法了解以下内容;
gcc -o amqsinqa -I/opt/mqm/inc amqsinqa.c -L/opt/mqm/lib -lcmqc
但是它“找不到-lcmqc”。我已经在lib中查看了,很正确地没有cmqc。如何确定这里需要的-l选项?
代码看起来很简单,有包含引用;
#include <cmqc.h>
通话本身;
MQCONN(QMgrName,&Hcon,&CompCode,&CReason);
如果我在命令行中省略了-l选项,那么我会得到;
undefined reference to 'MQCONN'
这并不奇怪。但是,MQCONN存在于cmqc.h中。
答案 0 :(得分:4)
要尝试帮助他人,此参考很有用:
64位应用程序:https://www.ibm.com/support/knowledgecenter/en/SSFKSJ_9.1.0/com.ibm.mq.dev.doc/q028490_.htm
32位应用程序: https://www.ibm.com/support/knowledgecenter/SSFKSJ_9.1.0/com.ibm.mq.dev.doc/q028480_.htm
总结:
-I
用于产品包括,通常在/opt/mqm/inc
中使用(对于Linux)-L
是示例中的库的路径,(对于Linux)通常在/opt/mqm/lib
(对于32位应用程序)和/opt/mqm/lib64
(对于64位)中
应用程序)-l
(小写L)用于所需的库,您需要的实际库是:
mqm
-服务器绑定的C应用程序(即-lmqm
,它与libmqm.so
链接)mqic
-客户端绑定的C应用程序(即与-lmqic
链接的libmqic.so
) ..和后缀_r
(如果要作为线程应用程序构建)(即,也要与-lpthread
链接,即提供-lmqm_r
或-lmqic_r
实际上与libmqm_r.so
或libmqic.so
链接)
cmqc.h
是主头文件的名称,还可以选择包含其他cmq*.h
头文件。
如果您使用的是(稳定的)C ++库,则命令行中将包含其他库,但这不在此答案的范围内-请参阅引用的链接
答案 1 :(得分:1)
感谢上述所有指导。好像我错过了一些东西。这就是我所做的;
将其移动到-l命令中,这给了我;
gcc -o amqsinqa -I / opt / mqm / inc amqsinqa.c -L / opt / mqm / lib -lmqm
但是它给我留下了“跳过不兼容”警告消息,随后是“找不到”错误消息。
对于此问题,最常见的Google回答是32/64位不匹配,因此我搜索了64位版本的不匹配项,该版本最终出现在lib64中。所以最后的编译命令是;
gcc -o amqsinqa -I / opt / mqm / inc amqsinqa.c -L / opt / mqm / lib64 -lmqm
答案 2 :(得分:0)
您应该查看gcc选项,尤其是'-m'选项,
如果要构建32位MQ应用程序,请执行以下操作:
gcc -m32 -o amqsinqa -I/opt/mqm/inc amqsinqa.c -L/opt/mqm/lib -lmqm
如果要构建64位MQ应用程序,请执行以下操作:
gcc -m64 -o amqsinqa -I/opt/mqm/inc amqsinqa.c -L/opt/mqm/lib64 -lmqm