这是我第一次在这里发帖提问,所以要善意:)。
使用cygwin将Linux应用程序移植到Windows(Windows 7 64位)时遇到问题。我不得不重写一些不受windows支持的代码,而且不存在于cygwin中(如adjtimex),我已经设法编译代码但是当我构建应用程序.exe文件(通过使用makefile)时,我得到了一个链接错误:
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版本4.9.2)
答案 0 :(得分:0)
根据我的理解,adjtime
是一个Linux主义,它可能通过FreeBSD爬进BSD世界。任何C或POSIX标准都无法记录它。
即使那些由C和POSIX标准记录的内容通常也未在Microsoft世界中正确实现,因此我不会对此功能不存在感到惊讶。
我很想知道关于你的这个项目的更多信息。虽然为了便携性的目的,可以编写一些实现定义的东西的简单包装,但我只能想象高度利基的用例,有更好的选择: