2012-07-25 77 views
0

我有一个令人讨厌的问题与我的C++程序。我有两个程序(一个主程序和一个辅助程序,用于测试),我最近从一个系统移动到另一个系统。在新系统上,我开始为主程序中的strptime方法获取未解决的参考错误。令人讨厌的是,辅助程序也有相同的方法,并且可以毫无困难地调用它。 Strptime在旧系统上工作,两个系统都运行相同版本的centos。strptime作为未解决的参考

我已经尝试了明显的事情来确定为什么我的参考未解决。我试着将我的帮助程序的每个头文件复制到我的主程序中,但仍然没有解决。我检查了eclipse的编译器/链接器设置,而主程序做了一些更多的事情(增加了一些符号,包括一些额外的文件夹和libld的链接),这些变化似乎没有解释为什么一个程序可以识别strptime。我试图创建一个演示程序,只使用strptime并且已被识别。我现在处于迷路状态,为什么我会遇到错误。任何人都可以提出其他建议,我可以检查未解决的参考的潜在影响吗?

我已经验证了我正在链接的time.h包含strptime方法,但它是在外部定义的。是否还有另外一个.h time.h文件应该包括哪个给出了该方法的内联定义?

+5

请发布确切的链接器命令和错误消息。 – 2012-07-25 19:19:54

回答

0

我以前没见过这一点,但是这可能帮助:

从Linux手册页...

http://linux.die.net/man/3/strptime

#define _XOPEN_SOURCE /* See feature_test_macros(7) */ 
#include <time.h> 

_XOPEN_SOURCE - 功能测试宏

定义此宏会导致头文件暴露定义s如下: •使用任何值定义将暴露符合POSIX.1,POSIX.2和XPG4的定义。 •500或更大的值另外公开了SUSv2的定义(UNIX 98)。 (由于glibc 2.2)600或更大的值额外暴露了SUSv3(UNIX 03;即,POSIX.1-2001基本规范加上XSI扩展)和C99定义的定义。

•(由于glibc 2.10)700或更高的值额外暴露了SUSv4的定义(即POSIX.1-2008基本规范加上XSI扩展)。

+0

我以为我做了这个正确的,但如果我去time.h文件eclipse仍然说它是未定义的。你能更好地告诉我如何确保这是#define正确?我应该使用-D将一些变量发送给编译器,以确保它在大型项目中的任何.H之前定义?也;任何线索为什么这不会是我的其他两个项目nessesary? – dsollen 2012-07-25 21:05:34

+0

好吧我有_GNU_SOURCE传递给我的cpp文件中的编译和#defined。我得到一个说法,我在我的文件中重新启用_GNU_SOURCE,但是仍然无法使用strptime,如果我去time.h文件,eclipse告诉我__XOPEN_SOURCE仍然未定义。我以为如果_GNU_SOURCE被定义为我设置?我也尝试直接设置XOPEN_SOURCE,它也没有工作。 AM我错过了什么? – dsollen 2012-07-25 21:22:25

+0

@dsollen对不起,只是阅读所有。你现在编译和链接了吗? – 2012-07-25 21:29:06