如何在不知道包含文件的情况下编译C程序 [英] How to compile a C program without knowing the include files
本文介绍了如何在不知道包含文件的情况下编译C程序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一些示例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引用;
#include <cmqc.h>
和调用本身;
MQCONN(QMgrName,&Hcon,&CompCode,&CReason);
如果我在命令行中省略了-l选项;
undefined reference to 'MQCONN'
这并不令人惊讶。但是,cmqc.h中存在MQCONN。
推荐答案
若要尝试帮助他人,此参考信息很有用:
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
是产品包含,(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
链接)
..如果您是作为线程化应用程序构建的(即您也链接了-lpthread
,即提供了实际上与libmqm_r.so
或libmqic.so
链接的-lmqm_r
或-lmqic_r
),则后缀_r
)
cmqc.h
是主头文件的名称,您还可以选择包括其他cmq*.h
头。
如果您使用的是(稳定的)C++库,命令行中还有其他库可以包含,但这超出了本答案的范围-请参阅引用的链接
这篇关于如何在不知道包含文件的情况下编译C程序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文