我正在编译一个称为nauty的程序。该程序使用规范函数名称getline,它也是标准GNU C库的一部分。
是否可以在编译时告诉GCC使用此程序定义的函数?
一种解决方案:
现在,您可以在某些应用程序.h
文件中声明该功能,例如:
int getline(...); // the custon getline
更改为:
int application_getline(...); // the custon getline
#define getline application_getline
我认为应该这样做。.c
假定包含函数的文件,它还将修复定义函数的.h
文件。
另外,使用grep
或“编辑”文件中的内容以确保该宏生效的每个位置都不会引起麻烦。
重要:在每个文件中,请确保该.h
文件包含在任何可能使用getline
符号的标准标题之后。您不希望该宏在那些宏中生效...
注意:这是一个丑陋的骇客。再说一次,根据某些标准,几乎所有涉及C预处理器宏的东西都可以被视为丑陋的骇客。再说一次,通常可以通过接受现有不兼容的代码库来进行协作和合作,尤其是在不需要长期维护的情况下。
注2:根据此答案并在注释中指出,这是C标准未定义的行为。请记住这一点,如果打算将软件维护更长的时间,则只需获得一次有效的可执行二进制文件即可。但是我添加了一个更好的解决方案。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句