如何在不知道包含文件的情况下编译C程序

Sli*_*y43 0 c ibm-mq

我有一些示例C代码,我希望这些代码可以适应我的需求。在此之前,我尝试按原样编译示例。C代码包含#include参考,我可以在'inc'目录中找到.h文件。还有一个对应的“ lib”目录。我正在努力寻找需要编译代码的命令行。

到目前为止,我已经设法做到以下几点;

gcc -o amqsinqa -I/opt/mqm/inc amqsinqa.c -L/opt/mqm/lib -lcmqc
Run Code Online (Sandbox Code Playgroud)

但是它“找不到-lcmqc”。我已经在lib中查看了,很正确地没有cmqc。如何确定这里需要的-l选项?

代码看起来很简单,有include引用;

#include <cmqc.h>
Run Code Online (Sandbox Code Playgroud)

还有电话本身;

MQCONN(QMgrName,&Hcon,&CompCode,&CReason);
Run Code Online (Sandbox Code Playgroud)

如果我在命令行中省略了-l选项,我会得到;

undefined reference to 'MQCONN'
Run Code Online (Sandbox Code Playgroud)

这不足为奇。MQCONN存在于cmqc.h中。

小智 5

为了尝试帮助他人,此参考非常有用:

综上所述:

  • -I 是针对产品包括的,(对于Linux)通常在 /opt/mqm/inc
  • -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 ++库,则命令行中将包含其他库,但这不在此答案的范围内-请参阅引用的链接