这是我第一次在这里发帖,所以请友好地回答:)。
我在使用cygwin将linux应用程序移植到windows(windows 7 64位)时遇到问题我必须重写一些Windows下不支持的代码,它不存在于CygWin(像AdjTimeX)中,我已经设法编译了代码,但是当我在构建Apvest.exe文件时(使用Maxfile),我得到了一个链接错误:

gcc  -Wl,-Map,ppsi.map2 -o ppsi ppsi.o -lrt -lc
ppsi.o: In function `win_time_adjust':
ppsi/time-win/win-time.c:74: undefined reference to `adjtime'
ppsi/time-win/win-time.c:74:(.text+0x1905): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `adjtime'

定义了adjtime函数,其中包含在代码中:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <time.h>
#include <sys/time.h> /* timex.h not available on windows so we use sys/time.h*/
#include <ppsi/ppsi.h>

下面是部分代码的外观:
static int win_time_adjust(struct pp_instance *ppi, long offset_ns, long freq_ppb){
struct timeval t;
int ret;
t.tv_sec = 0;
t.tv_usec = 0;

if (offset_ns) {
    t.tv_sec = offset_ns / 1000000;
    t.tv_usec = offset_ns / 1000;  /*microseconds */
}

ret = adjtime(&t, NULL);
pp_diag(ppi, time, 1, "%s: %li %li\n", __func__, offset_ns, freq_ppb);
return ret;
}

我以前也遇到过类似的问题,在编译应用程序时通过链接丢失的库来解决我在这里也遇到同样的问题,并在编译时链接了libc(因为adjtime应该在那里)-lc,但是得到了同样的错误我不确定adjtime是如何定义的,我想知道是否有一些cygwin库我应该链接代替?
编译时使用cygwin(gcc version 4.9.2)

最佳答案

据我所知,adjtime是一个Linux ism,它很可能是通过FreeBSD进入BSD世界的它当然没有任何C或POSIX标准的文档。
即使是由C和POSIX标准记录的那些在微软世界中经常无法正确实现,所以我不会惊讶于这个函数不存在。
我很有兴趣多了解你的这个项目虽然为了便于移植,可以编写一些实现定义的东西的简单包装器,但我只能想象有更好的替代方案的高度利基的用例:
如果需要具有大量良好的安全熵的内容来为伪随机数生成器种子,则应使用加密库提供的内容。
如果要进行性能测试,应该学习如何使用探查器,而不是滚动自己的分析代码此外,每次“性能测试”都应该像第一次观察的科学家一样进行;一般来说,最好不要让以前项目的测试指导未来项目的优化相反,让当前项目的概要文件来指导当前项目的优化(在当前硬件上),你会在不知不觉中欢呼!

关于c - Cygwin对adjtime的 undefined reference ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28718332/

10-11 19:28