Установка xlsxwriter для C на Windows
Я довольно новый в C, и я пытаюсь манипулировать теми же файлами данных и экспортировать их в файл Excel.
Как и в этом случае Запуск libxlsxwriter в Windows, я пытаюсь установить libxlsxwriter в Windows, используя MSYS2.
Я сделал до сих пор:
1) Установлен MSYS2 64 bit вместе с инструкцией по установке
2) С терминала MSYS2 pacman -S git gcc make zlib-devel
3) А также:
git clone https://github.com/jmcnamara/libxlsxwriter.git
MichKon@MichKon-PC MSYS ~
$ cd libxlsxwriter
MichKon@MichKon-PC MSYS ~/libxlsxwriter
$ make
make[1]: Entering directory '/home/MichKon/libxlsxwriter/third_party/minizip'
make[1]: Leaving directory '/home/MichKon/libxlsxwriter/third_party/minizip'
make[1]: Entering directory '/home/MichKon/libxlsxwriter/third_party/tmpfileplus'
make[1]: Leaving directory '/home/MichKon/libxlsxwriter/third_party/tmpfileplus'
make[1]: Entering directory '/home/MichKon/libxlsxwriter/src'
make[1]: Leaving directory '/home/MichKon/libxlsxwriter/src'
MichKon@MichKon-PC MSYS ~/libxlsxwriter
$ make install
MichKon@MichKon-PC MSYS ~/libxlsxwriter
$ cc myexcel.c -o myexcel -lxlsxwriter
/usr/lib/../lib/libxlsxwriter.a(zip.o):zip.c:(.text+0x1bc9): undefined reference to `crc32'
/usr/lib/../lib/libxlsxwriter.a(zip.o):zip.c:(.text+0x1bc9): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `crc32'
/usr/lib/../lib/libxlsxwriter.a(zip.o):zip.c:(.text+0x1d1f): undefined reference to `deflate'
/usr/lib/../lib/libxlsxwriter.a(zip.o):zip.c:(.text+0x1d1f): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `deflate'
/usr/lib/../lib/libxlsxwriter.a(zip.o):zip.c:(.text+0x2280): undefined reference to `deflate'
/usr/lib/../lib/libxlsxwriter.a(zip.o):zip.c:(.text+0x2280): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `deflate'
/usr/lib/../lib/libxlsxwriter.a(zip.o):zip.c:(.text+0x238a): undefined reference to `deflateEnd'
/usr/lib/../lib/libxlsxwriter.a(zip.o):zip.c:(.text+0x238a): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `deflateEnd'
/usr/lib/../lib/libxlsxwriter.a(zip.o):zip.c:(.text+0x25e6): undefined reference to `deflateEnd'
/usr/lib/../lib/libxlsxwriter.a(zip.o):zip.c:(.text+0x25e6): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `deflateEnd'
/usr/lib/../lib/libxlsxwriter.a(zip.o):zip.c:(.text+0x2649): undefined reference to `deflateEnd'
/usr/lib/../lib/libxlsxwriter.a(zip.o):zip.c:(.text+0x2649): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `deflateEnd'
/usr/lib/../lib/libxlsxwriter.a(zip.o):zip.c:(.text+0x2e06): undefined reference to `deflateInit2_'
/usr/lib/../lib/libxlsxwriter.a(zip.o):zip.c:(.text+0x2e06): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `deflateInit2_'
collect2: error: ld returned 1 exit status
MichKon@MichKon-PC MSYS ~/libxlsxwriter
$ ./myexcel
bash: ./myexcel: No such file or directory
MichKon@MichKon-PC MSYS ~/libxlsxwriter
$ cc myexcel.c -o myexcel -lxlsxwriter
/usr/lib/../lib/libxlsxwriter.a(zip.o):zip.c:(.text+0x1bc9): undefined reference to `crc32'
/usr/lib/../lib/libxlsxwriter.a(zip.o):zip.c:(.text+0x1bc9): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `crc32'
/usr/lib/../lib/libxlsxwriter.a(zip.o):zip.c:(.text+0x1d1f): undefined reference to `deflate'
/usr/lib/../lib/libxlsxwriter.a(zip.o):zip.c:(.text+0x1d1f): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `deflate'
/usr/lib/../lib/libxlsxwriter.a(zip.o):zip.c:(.text+0x2280): undefined reference to `deflate'
/usr/lib/../lib/libxlsxwriter.a(zip.o):zip.c:(.text+0x2280): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `deflate'
/usr/lib/../lib/libxlsxwriter.a(zip.o):zip.c:(.text+0x238a): undefined reference to `deflateEnd'
/usr/lib/../lib/libxlsxwriter.a(zip.o):zip.c:(.text+0x238a): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `deflateEnd'
/usr/lib/../lib/libxlsxwriter.a(zip.o):zip.c:(.text+0x25e6): undefined reference to `deflateEnd'
/usr/lib/../lib/libxlsxwriter.a(zip.o):zip.c:(.text+0x25e6): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `deflateEnd'
/usr/lib/../lib/libxlsxwriter.a(zip.o):zip.c:(.text+0x2649): undefined reference to `deflateEnd'
/usr/lib/../lib/libxlsxwriter.a(zip.o):zip.c:(.text+0x2649): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `deflateEnd'
/usr/lib/../lib/libxlsxwriter.a(zip.o):zip.c:(.text+0x2e06): undefined reference to `deflateInit2_'
/usr/lib/../lib/libxlsxwriter.a(zip.o):zip.c:(.text+0x2e06): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `deflateInit2_'
collect2: error: ld returned 1 exit status
MichKon@MichKon-PC MSYS ~/libxlsxwriter
$ ./myexcel
bash: ./myexcel: No such file or directory
MichKon@MichKon-PC MSYS ~/libxlsxwriter
$ xdg-open myexcel.xlsx
bash: xdg-open: command not found
MichKon@MichKon-PC MSYS ~/libxlsxwriter
$ cc myexcel.c -o myexcel -I /path/to/libxlsxwriter/include
/tmp/ccp8qMT9.o:myexcel.c:(.text+0x15): undefined reference to `workbook_new'
/tmp/ccp8qMT9.o:myexcel.c:(.text+0x15): relocation truncated to fit: R_X86_64_PC 32 against undefined symbol `workbook_new'
/tmp/ccp8qMT9.o:myexcel.c:(.text+0x2a): undefined reference to `workbook_add_worksheet'
/tmp/ccp8qMT9.o:myexcel.c:(.text+0x2a): relocation truncated to fit: R_X86_64_PC 32 against undefined symbol `workbook_add_worksheet'
/tmp/ccp8qMT9.o:myexcel.c:(.text+0x64): undefined reference to `worksheet_write_string'
/tmp/ccp8qMT9.o:myexcel.c:(.text+0x64): relocation truncated to fit: R_X86_64_PC 32 against undefined symbol `worksheet_write_string'
/tmp/ccp8qMT9.o:myexcel.c:(.text+0x70): undefined reference to `workbook_close'
/tmp/ccp8qMT9.o:myexcel.c:(.text+0x70): relocation truncated to fit: R_X86_64_PC 32 against undefined symbol `workbook_close'
collect2: error: ld returned 1 exit status
MichKon@MichKon-PC MSYS ~/libxlsxwriter
$ ./myexcel
bash: ./myexcel: No such file or directory
MichKon@MichKon-PC MSYS ~/libxlsxwriter
$ cc myexcel.c -o myexcel -I /path/to/libxlsxwriter/lib/libxlsxwiter.a -lz
/tmp/ccgsiylm.o:myexcel.c:(.text+0x15): undefined reference to `workbook_new'
/tmp/ccgsiylm.o:myexcel.c:(.text+0x15): relocation truncated to fit: R_X86_64_PC 32 against undefined symbol `workbook_new'
/tmp/ccgsiylm.o:myexcel.c:(.text+0x2a): undefined reference to `workbook_add_worksheet'
/tmp/ccgsiylm.o:myexcel.c:(.text+0x2a): relocation truncated to fit: R_X86_64_PC 32 against undefined symbol `workbook_add_worksheet'
/tmp/ccgsiylm.o:myexcel.c:(.text+0x64): undefined reference to `worksheet_write_string'
/tmp/ccgsiylm.o:myexcel.c:(.text+0x64): relocation truncated to fit: R_X86_64_PC 32 against undefined symbol `worksheet_write_string'
/tmp/ccgsiylm.o:myexcel.c:(.text+0x70): undefined reference to `workbook_close'
/tmp/ccgsiylm.o:myexcel.c:(.text+0x70): relocation truncated to fit: R_X86_64_PC 32 against undefined symbol `workbook_close'
collect2: error: ld returned 1 exit status
MichKon@MichKon-PC MSYS ~/libxlsxwriter
$ make myexcel
cc myexcel.c -o myexcel
/tmp/ccMI33kF.o:myexcel.c:(.text+0x15): undefined reference to `workbook_new'
/tmp/ccMI33kF.o:myexcel.c:(.text+0x15): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `workbook_new'
/tmp/ccMI33kF.o:myexcel.c:(.text+0x2a): undefined reference to `workbook_add_worksheet'
/tmp/ccMI33kF.o:myexcel.c:(.text+0x2a): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `workbook_add_worksheet'
/tmp/ccMI33kF.o:myexcel.c:(.text+0x64): undefined reference to `worksheet_write_string'
/tmp/ccMI33kF.o:myexcel.c:(.text+0x64): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `worksheet_write_string'
/tmp/ccMI33kF.o:myexcel.c:(.text+0x70): undefined reference to `workbook_close'
/tmp/ccMI33kF.o:myexcel.c:(.text+0x70): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `workbook_close'
collect2: error: ld вернул 1 состояние завершения make: *** [: myexcel] Error 1
MichKon@MichKon-PC MSYS ~/libxlsxwriter
$
Так что, похоже, не работает в конце. Там нет exe-файла, созданного. Кажется, что последние три команды упорядочивают компиляцию, но что-то не так с заголовочными файлами...
Спасибо за ваше время
РЕДАКТИРОВАТЬ:
Поэтому я углубился в это решение: запуск libxlsxwriter в Windows, так как кажется, что у меня есть проблема, аналогичная Carl.
Make не работает, за исключением случаев, когда я помещаю файл.c в один из предопределенных файлов, таких как примеры, а затем через командное окно могу его скомпилировать и запустить. Но я хотел бы знать, есть ли что-нибудь, что можно сделать, чтобы можно было нормально компилировать и запускать файлы, как и любые другие файлы C через DevC++.
Я пытался добавить C:\msys64\usr\bin
в PATH пользователя и компьютера (переменные окружения), но, похоже, это не работает.
Спасибо за ваше время!
1 ответ
Это должно работать в соответствии с инструкциями. Я перезапустил их, чтобы проверить, и все заработало:
# Install MYSYS2 from http://www.msys2.org/
# For the example below I used msys2-x86_64-20161025.exe
# Run the MYSYS2 Shell and install the dependencies:
$ cd /tmp
$ pacman -S git gcc make zlib-devel
# Clone, make, and install libxlswriter:
$ git clone https://github.com/jmcnamara/libxlsxwriter.git
$ cd libxlsxwriter/
$ make
$ make install
# Create a sample C test file in another directory:
$ cd ..
$ mkdir mytmp
$ cd mytmp
$ vim myexcel.c
$ cat myexcel.c
#include "xlsxwriter.h"
int main() {
lxw_workbook *workbook = workbook_new("myexcel.xlsx");
lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL);
int row = 0;
int col = 0;
worksheet_write_string(worksheet, row, col, "Hello me!", NULL);
return workbook_close(workbook);
}
# Compile and run the application:
$ cc myexcel.c -o myexcel -lxlsxwriter -lz
$ ./myexcel.exe
$ ls -ltr
total 1077
-rw-r--r-- 1 jmcnamara Domain Users 313 Apr 6 19:02 myexcel.c
-rwxr-xr-x 1 jmcnamara Domain Users 1093488 Apr 6 19:03 myexcel.exe
-rw-r--r-- 1 jmcnamara Domain Users 5254 Apr 6 19:03 myexcel.xlsx
Проблемы, которые вы видите, связаны с тем, что заголовок / библиотека не найдены, поэтому дважды проверьте этап установки.
Кроме того, это не та же проблема, что и на другой вопрос, с которым вы связались. В их случае у них была смесь или 32- и 64-битные библиотеки, которые вызывали проблемы со связью. Я автор libxlsxwriter, кстати.