我正在尝试使用cygwin中的gcc使用FTDI的ftd2xx lib编译示例64位c程序,但没有成功。我总是以链接器错误结尾。

我的项目包含以下文件:


main.c我的示例应用程序
ftd2xx.h库的头
ftd2xx.lib导入库
ftd2xx64.dll动态库64位
ftd2xx.h使用的wintypes.h包装器,其中包括windows.h


这是我的主要功能:

#include <stdio.h>
#include <windows.h>  // for windows specific keywords in ftd2xx.h
#include "ftd2xx.h"   // Header file for ftd2xx.lib
int main()
{
   FT_HANDLE ft_handle;  // handle to the USB ic
   FT_STATUS ft_status;  // for status report(error,io status etc)

   ft_status = FT_Open(0,&ft_handle); //open a connection

   if(ft_status == FT_OK) //error checking
     {
        printf("\n\n\tConnection with FT 232 successfull\n");
     }
   else
     {
        printf("\n\n\tConnection Failed !");
        printf("\n\tCheck device connection");
     }
    FT_Close(ft_handle);    //Close the connection
    return 0;
 }


这是我的链接器cmd

Building target: testSimple.exe
Invoking: Cygwin C Linker
gcc -L/cygdrive/e/jschubert/workspaces/testSimple/ -o "testSimple.exe"  ./main.o   -lftd2xx


这是我的输出

/cygdrive/e/jschubert/workspaces/testSimple//ftd2xx.lib(FTD2XX.dll.b):(.text+0x2): relocation truncated to fit: R_X86_64_32 against symbol `__imp_FT_Open' defined in .idata$5 section in /cygdrive/e/jschubert/workspaces/testSimple//ftd2xx.lib(FTD2XX.dll.b)
/cygdrive/e/jschubert/workspaces/testSimple//ftd2xx.lib(FTD2XX.dll.b):(.text+0x2): relocation truncated to fit: R_X86_64_32 against symbol `__imp_FT_Close' defined in .idata$5 section in /cygdrive/e/jschubert/workspaces/testSimple//ftd2xx.lib(FTD2XX.dll.b)


阅读了How does the Import Library work? Details?http://www.mikrocontroller.net/topic/26484文章后,我很确定生成的导出lib函数存在问题。但是我该如何纠正呢?

最佳答案

在Cygwin上-mcmodel = medium已经是默认值。将-Wl,-image-base -Wl,0x10000000添加到GCC链接程序可修复该错误。

10-08 03:55