2017-01-18 8 views
0

Я пытаюсь скомпилировать пример 64-битной c-программы с использованием ftd2xx lib FTDI, используя gcc внутри cygwin без каких-либо успехов. Я всегда получаю ошибки компоновщика.Использование cygwin для компиляции приложения c с использованием ftd2xx.lib by FTDI

Мой проект содержит эти файлы:

  • main.c Мой Sample Application
  • ftd2xx.h заголовке библиотеки
  • ftd2xx.lib Importlibrary
  • ftd2xx64.dll динамическая библиотека 64 битном
  • wintypes.h Упаковочный используется ftd2xx.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 Я довольно shure, что есть проблема с сгенерированными функциями экспорта lib. Но как мне их исправить?

+0

Посмотрите на эту ссылку: https://www.technovelty.org/c/relocation-truncated-to-fit-wtf.html – SergeyLebedev

+0

И попробуйте ту добавить '-mmodel' ключ зажигания в' gcc' командной строки – SergeyLebedev

+0

Спасибо за ваш ответ. Но как я могу использовать флаг -mmodel. Это не gcc -L/cygdrive/e/jschubert/workspaces/testSimple/-o "testSimple.exe" ./main.o -lftd2xx -mmodel. Я не могу много узнать об этом флаге в Интернете. –

ответ

0

На Cygwin -mcmodel = medium уже установлен по умолчанию. Добавление -Wl, - image-base -Wl, 0x10000000 в GCC-компоновщик зафиксировало ошибку.