未定义的引用:cygwin_posix_to_win32_path_列表和cygwin_posix_to_win32_path_列表大小

未定义的引用:cygwin_posix_to_win32_path_列表和cygwin_posix_to_win32_path_列表大小,cygwin,Cygwin,我试图在Cygwin中编译代码,收到“Cygwin_posix_to_win32_path_list”和“Cygwin_posix_to_win32_path_list_buf_size”的未定义引用错误 是否有我应该添加的缺少的库?我确信已安装win32 api包 谢谢你的帮助 tclEnv.o:tclEnv.c:(.text+0xf6): undefined reference to `cygwin_posix_to_win32_path_list_buf_size' tclEnv.o:tc

我试图在Cygwin中编译代码,收到“Cygwin_posix_to_win32_path_list”和“Cygwin_posix_to_win32_path_list_buf_size”的未定义引用错误

是否有我应该添加的缺少的库?我确信已安装win32 api包

谢谢你的帮助

tclEnv.o:tclEnv.c:(.text+0xf6): undefined reference to `cygwin_posix_to_win32_path_list_buf_size'
tclEnv.o:tclEnv.c:(.text+0xf6): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `cygwin_posix_to_win32_path_list_buf_size'
tclEnv.o:tclEnv.c:(.text+0x118): undefined reference to `cygwin_posix_to_win32_path_list'
tclEnv.o:tclEnv.c:(.text+0x118): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `cygwin_posix_to_win32_path_list'
/usr/bin/ld: tclEnv.o: bad reloc address 0x0 in section `.pdata'
collect2: error: ld returned 1 exit status
Makefile:550: recipe for target 'libtcl8.5.dll' failed
make: *** [libtcl8.5.dll] Error 1

这些函数是Cygwin1.x的一部分,但是

因此,我们必须创建一些实用程序函数,这些函数使用版本2中的新函数,但保持相同的名称和接口(适配器)。由于我需要使用一些,我也需要完成这一点。让我们先看一下文档

这是用于转换路径的当前函数的函数定义

ssize\u t cygwin\u conv\u路径(
cygwin_conv_路径什么,
const void*从,
无效*至,
大小
);

这是用于转换路径的上一个函数的函数定义

void cygwin_posix_to_win32_path_list(const char*posix,char*win32)

使用这个和示例(),我们可能可以使某些东西起作用

/**
 * Adapter for old Cygwin 1.x functions missing from Cygwin 2.x
 *
 * Based on the documentation for 1.4 and 2.x
 * - http://pipeline.lbl.gov/code/3rd_party/licenses.win/cygwin-doc-1.4/html/cygwin-api/func-cygwin-posix-to-win32-path-list.html
 * - https://cygwin.com/cygwin-api/func-cygwin-conv-path.html
 *
 */
#include <sys/cygwin.h>

void cygwin_posix_to_win32_path_list(const char *posix, char * win32){

    // We do not know the size of the win32 buffer, but hopefully
    // it is at least size long ...
    ssize_t size = cygwin_conv_path( CCP_POSIX_TO_WIN_A, posix, NULL, 0);

    cygwin_conv_path( CCP_POSIX_TO_WIN_A, posix, win32, size);
}
/**
*Cygwin 2.x中缺少用于旧Cygwin 1.x函数的适配器
*
*基于1.4和2.x的文档
* - http://pipeline.lbl.gov/code/3rd_party/licenses.win/cygwin-doc-1.4/html/cygwin-api/func-cygwin-posix-to-win32-path-list.html
* - https://cygwin.com/cygwin-api/func-cygwin-conv-path.html
*
*/
#包括
无效cygwin\u posix\u到\u win32\u路径\u列表(常量字符*posix,字符*win32){
//我们不知道win32缓冲区的大小,但希望如此
//它至少有一码长。。。
ssize_t size=cygwin_conv_路径(CCP_POSIX_TO_WIN_A,POSIX,NULL,0);
cygwin_conv_路径(CCP_POSIX_TO_WIN_A,POSIX,win32,size);
}
有很多方法可以使用它来修复代码:

  • 复制粘贴到代码中
  • 保存到adapter.c和
    #在相关代码中包括adapter.c
  • 将其编译到adapter.o中,并使用
    ld将其链接到其他对象文件

您使用的是什么版本的Cygwin?最新文档未提及此功能。参考:谢谢。是1.7.29。