Рейтинг:0

FBExport — использовать на Ubuntu

флаг tr

TL;DR: Как использовать FBExport в Ubuntu / как экспортировать результат запроса Firebird в файл csv.

Я хотел бы экспортировать результат запроса из базы данных firebird в файл csv. В Windows я делаю аналогичную работу, используя FBExport.

К сожалению, я не знаю, как использовать этот инструмент в Ubuntu.

Я скачал пак с http://www.firebirdfaq.org/fbexport.php

Когда я пытаюсь запустить ./fbexport, я получаю сообщение об ошибке:

./fbexport: ошибка при загрузке разделяемых библиотек: libfbclient.so.2: не удается открыть общий объектный файл: нет такого файла или каталога

Также я попытался скомпилировать пакет.

Сначала я изменил делать файл из:

################################################### ##############################
.СУФФИКСЫ: .o .cpp

OBJECTS_FBE=fbexport/ParseArgs.o fbexport/FBExport.o fbexport/cli-main.o
OBJECTS_FBC=fbcopy/args.o fbcopy/fbcopy.o fbcopy/TableDependency.o fbcopy/main.o

# Флаги компилятора и компоновщика
COMPILE_FLAGS=-O1 -DIBPP_LINUX -DIBPP_GCC -Iibpp
LINK_FLAGS=-pthread -lfbclient

#COMPILE_FLAGS=-O1 -DIBPP_WINDOWS -DIBPP_GCC -Iibpp
#LINK_FLAGS=

все: exe/fbcopy exe/fbexport

exe/fbexport: $(OBJECTS_FBE) ibpp/all_in_one.o
        g++ $(LINK_FLAGS) ibpp/all_in_one.o $(OBJECTS_FBE) -oexe/fbexport

exe/fbcopy: $(OBJECTS_FBC) ibpp/all_in_one.o
        g++ $(LINK_FLAGS) ibpp/all_in_one.o $(OBJECTS_FBC) -oexe/fbcopy

# только линукс
# FB2.0: g++ -pthread -lfbclient $(OBJECTS) -o$(EXENAME)
# FB1.5: g++ -lfbclient $(OBJECTS) -o$(EXENAME)
# FB1.0: g++ -lgds -lcrypt -lm $(OBJECTS) -o$(EXENAME)

установить:
        установить exe/fbcopy /usr/bin/fbcopy
        установить exe/fbexport /usr/bin/fbexport

.cpp.о:
        g++ -c $(COMPILE_FLAGS) -o $@ $<

чистый:
        rm -f fbcopy/*.o
        rm -f ibpp/all_in_one.o
        rm -f exe/fbcopy*
        rm -f fbexport/*.o
        rm -f exe/fbexport*

#EOF

к:

################################################### ##############################
.СУФФИКСЫ: .o .cpp

OBJECTS_FBE=fbexport/ParseArgs.o fbexport/FBExport.o fbexport/cli-main.o

# Флаги компилятора и компоновщика
COMPILE_FLAGS=-O1 -DIBPP_LINUX -DIBPP_GCC -Iibpp
LINK_FLAGS=-pthread -lfbclient

#COMPILE_FLAGS=-O1 -DIBPP_WINDOWS -DIBPP_GCC -Iibpp
#LINK_FLAGS=

все: exe/fbexport

exe/fbexport: $(OBJECTS_FBE) ibpp/all_in_one.o
        g++ $(LINK_FLAGS) ibpp/all_in_one.o $(OBJECTS_FBE) -oexe/fbexport

# только линукс
# FB2.0: g++ -pthread -lfbclient $(OBJECTS) -o$(EXENAME)
# FB1.5: g++ -lfbclient $(OBJECTS) -o$(EXENAME)
# FB1.0: g++ -lgds -lcrypt -lm $(OBJECTS) -o$(EXENAME)

установить:
        установить exe/fbexport /usr/bin/fbexport

.cpp.о:
        g++ -c $(COMPILE_FLAGS) -o $@ $<

чистый:
        rm -f ibpp/all_in_one.o
        rm -f fbexport/*.o
        rm -f exe/fbexport*

#EOF

(потому что мне нравится компилировать только FBExport (исключая FBCopy))

После этого изменения я попытался запустить делать в основной папке.

Вывод:

user@apiserver:~/fbexport-1.90$ сделать
g++ -c -O1 -DIBPP_LINUX -DIBPP_GCC -Iibpp -o fbexport/ParseArgs.o fbexport/ParseArgs.cpp
g++ -c -O1 -DIBPP_LINUX -DIBPP_GCC -Iibpp -o fbexport/FBExport.o fbexport/FBExport.cpp
fbexport/FBExport.cpp: В функции-члене «std::string FBExport::CreateHumanString(IBPP::Statement&, int)»:
fbexport/FBExport.cpp:318:29: предупреждение: формат «%ld» ожидает аргумент типа «long int», но аргумент 3 имеет тип «int» [-Wformat=]
  318 | sprintf(str, "%ld", x);
      | ~~^ ~
      | | |
      | | инт
      | длинный внутренний
      | %d
fbexport/FBExport.cpp:40:21: предупреждение: формат «%lli» ожидает аргумент типа «long long int», но аргумент 3 имеет тип «int64_t» {также известный как «long» int} [-Wformat=]
   40 | #define INT64FORMAT "%lli"
      | ^~~~~~
fbexport/FBExport.cpp:351:26: примечание: в расширении макроса «INT64FORMAT»
  351 | sprintf(str, INT64FORMAT, int64val);
      | ^~~~~~~~~~~~
fbexport/FBExport.cpp:40:25: примечание: здесь определяется строка формата
   40 | #define INT64FORMAT "%lli"
      | ~~~^
      | |
      | длинный длинный внутренний
      | %li
fbexport/FBExport.cpp: В функции-члене «bool FBExport::CreateString(IBPP::Statement&, int, std::string&)»:
fbexport/FBExport.cpp:429:29: предупреждение: формат «%ld» ожидает аргумент типа «long int», но аргумент 3 имеет тип «int» [-Wformat=]
  429 | sprintf(str, "%ld", x);
      | ~~^ ~
      | | |
      | | инт
      | длинный внутренний
      | %d
fbexport/FBExport.cpp:435:29: предупреждение: формат «%ld» ожидает аргумент типа «long int», но аргумент 3 имеет тип «int» [-Wformat=]
  435 | sprintf(str, "%ld", d.GetDate());
      | ~~^ ~~~~~~~~~~~~
      | | |
      | длинный интервал
      | %d
fbexport/FBExport.cpp:440:29: предупреждение: формат «%ld» ожидает аргумент типа «long int», но аргумент 3 имеет тип «int» [-Wformat=]
  440 | sprintf(str, "%ld", t.GetTime());
      | ~~^ ~~~~~~~~~~~~
      | | |
      | длинный интервал
      | %d
fbexport/FBExport.cpp:40:21: предупреждение: формат «%lli» ожидает аргумент типа «long long int», но аргумент 3 имеет тип «int64_t» {также известный как «long» int} [-Wformat=]
   40 | #define INT64FORMAT "%lli"
      | ^~~~~~
fbexport/FBExport.cpp:462:26: примечание: в расширении макроса «INT64FORMAT»
  462 | sprintf(str, INT64FORMAT, int64val);
      | ^~~~~~~~~~~~
fbexport/FBExport.cpp:40:25: примечание: здесь определяется строка формата
   40 | #define INT64FORMAT "%lli"
      | ~~~^
      | |
      | длинный длинный внутренний
      | %li
fbexport/FBExport.cpp: В функции-члене «int FBExport::Export(IBPP::Statement&, FILE*)»:
fbexport/FBExport.cpp:487:18: предупреждение: ISO C++17 не позволяет «зарегистрировать» спецификатор класса хранения [-Wregister]
  487 | регистрация int fc = st->Columns();
      | ^~
fbexport/FBExport.cpp:491:23: предупреждение: ISO C++17 не позволяет «зарегистрировать» спецификатор класса хранения [-Wregister]
  491 | for (зарегистрировать int i=1; i<=fc; i++)
      | ^
fbexport/FBExport.cpp:505:27: предупреждение: ISO C++17 не позволяет «зарегистрировать» спецификатор класса хранения [-Wregister]
  505 | for (register int i=1; i<=fc; i++) // ... экспортировать все поля в файл.
      | ^
fbexport/FBExport.cpp: В функции-члене «int FBExport::ExportHuman(IBPP::Statement&, FILE*)»:
fbexport/FBExport.cpp:829:18: предупреждение: ISO C++17 не позволяет «зарегистрировать» спецификатор класса хранения [-Wregister]
  829 | регистрация int fc = st->Columns();
      | ^~
fbexport/FBExport.cpp:835:27: предупреждение: ISO C++17 не позволяет «зарегистрировать» спецификатор класса хранилища [-Wregister]
  835 | for (register int i=1; i<=fc; i++) // вывод CSV-заголовка.
      | ^
fbexport/FBExport.cpp:847:27: предупреждение: ISO C++17 не позволяет «зарегистрировать» спецификатор класса хранения [-Wregister]
  847 | for (register int i=1; i<=fc; i++) // ... экспортировать все поля в файл.
      | ^
fbexport/FBExport.cpp:860:27: предупреждение: ISO C++17 не позволяет «зарегистрировать» спецификатор класса хранения [-Wregister]
  860 | for (register int i=1; i<=fc; i++) // вывод CSV-заголовка.
      | ^
fbexport/FBExport.cpp:875:27: предупреждение: ISO C++17 не позволяет «зарегистрировать» спецификатор класса хранения [-Wregister]
  875 | for (register int i=1; i<=fc; i++) // ... экспортировать все поля в файл.
      | ^
fbexport/FBExport.cpp: В функции «int statement_length(FILE*)»:
fbexport/FBExport.cpp:1335:24: предупреждение: ISO C++17 не позволяет «зарегистрировать» спецификатор класса хранилища [-Wregister]
 1335 | регистр int c = 0, tmp = 0;
      | ^
fbexport/FBExport.cpp:1335:31: предупреждение: ISO C++17 не позволяет «зарегистрировать» спецификатор класса хранения [-Wregister]
 1335 | регистр int c = 0, tmp = 0;
      | ^~~
fbexport/FBExport.cpp:1336:24: предупреждение: ISO C++17 не позволяет «зарегистрировать» спецификатор класса хранения [-Wregister]
 1336 | регистрировать л = 0;
      | ^
fbexport/FBExport.cpp: В функции «char* read_statement(char*, int, FILE*)»:
fbexport/FBExport.cpp:1376:24: предупреждение: ISO C++17 не позволяет «зарегистрировать» спецификатор класса хранения [-Wregister]
 1376 | регистр int c = 0, tmp = 0;
      | ^
fbexport/FBExport.cpp:1376:31: предупреждение: ISO C++17 не позволяет «зарегистрировать» спецификатор класса хранения [-Wregister]
 1376 | регистр int c = 0, tmp = 0;
      | ^~~
fbexport/FBExport.cpp:1377:25: предупреждение: ISO C++17 не позволяет «зарегистрировать» спецификатор класса хранения [-Wregister]
 1377 | зарегистрируйте символ *P;
      | ^
fbexport/FBExport.cpp: В функции-члене «std::string FBExport::CreateHumanString(IBPP::Statement&, int)»:
fbexport/FBExport.cpp:339:17: предупреждение: игнорируется возвращаемое значение «char* gcvt(double, int, char*)», объявленное с атрибутом «warn_unused_result» [-Wunused-result]
  339 | gcvt(fval, 19, стр);
      | ~~~~^~~~~~~~~~~~~~~~
fbexport/FBExport.cpp:345:17: предупреждение: игнорируется возвращаемое значение «char* gcvt(double, int, char*)», объявленное с атрибутом «warn_unused_result» [-Wunused-result]
  345 | гцвт(двал, 19, ул);
      | ~~~~^~~~~~~~~~~~~~~~
fbexport/FBExport.cpp: В функции-члене «bool FBExport::CreateString(IBPP::Statement&, int, std::string&)»:
fbexport/FBExport.cpp:452:17: предупреждение: игнорируется возвращаемое значение «char* gcvt(double, int, char*)», объявленное с атрибутом «warn_unused_result» [-Wunused-result]
  452 | gcvt(fval, 19, стр);
      | ~~~~^~~~~~~~~~~~~~~~
fbexport/FBExport.cpp:457:17: предупреждение: игнорируется возвращаемое значение «char* gcvt(double, int, char*)», объявленное с атрибутом «warn_unused_result» [-Wunused-result]
  457 | гцвт(двал, 19, ул);
      | ~~~~^~~~~~~~~~~~~~~~
fbexport/FBExport.cpp: В функции-члене «int FBExport::Import(IBPP::Statement&, FILE*)»:
fbexport/FBExport.cpp:706:26: предупреждение: игнорируется возвращаемое значение «size_t fread(void*, size_t, size_t, FILE*)», объявленное с атрибутом «warn_unused_result» [-Wunused-result]
  706 | fread(buff, size, 1, fp);
      | ~~~~~^~~~~~~~~~~~~~~~~~~~
fbexport/FBExport.cpp: В функции-члене âint FBExport::Init(Arguments*)â:
fbexport/FBExport.cpp:1211:41: предупреждение: â__builtin___sprintf_chkâ может записать завершающий нуль после конца адресата [-Wformat-overflow=]
 1211 | sprintf(число, "%d", i+1);
      | ^
В файле, включенном из /usr/include/stdio.h:888,
                 из /usr/include/С++/11/cstdio:42,
                 из /usr/include/c++/11/ext/string_conversions.h:43,
                 из /usr/include/c++/11/bits/basic_string.h:6606,
                 из /usr/include/С++/11/строка: 55,
                 из ibpp/ibpp.h:91,
                 из fbexport/FBExport.cpp:44:
/usr/include/x86_64-linux-gnu/bits/stdio2.h:38:34: примечание: «__builtin___sprintf_chk» выводит от 2 до 11 байтов в место назначения размером 10
   38 | вернуть __builtin___sprintf_chk (__s, __USE_FORTIFY_LEVEL - 1,
      | ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~
   39 | __glibc_objsize (__s), __fmt,
      | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   40 | __va_arg_pack());
      | ~~~~~~~~~~~~~~~~~
g++ -c -O1 -DIBPP_LINUX -DIBPP_GCC -Iibpp -o fbexport/cli-main.o fbexport/cli-main.cpp
g++ -c -O1 -DIBPP_LINUX -DIBPP_GCC -Iibpp -o ibpp/all_in_one.o ibpp/all_in_one.cpp
g++ -pthread -lfbclient ibpp/all_in_one.o fbexport/ParseArgs.o fbexport/FBExport.o fbexport/cli-main.o -oexe/fbexport

Что я могу сделать в этом случае?

С уважением Томаш

yagmoth555 avatar
флаг cn
Привет, как обходной путь, можете ли вы скопировать базу данных firebird на компьютер с Windows, чтобы выполнить задачу? Я спрашиваю, поскольку я знаю, что база данных Firebird представляет собой один файл.
флаг tr
@ yagmoth555 - спасибо за ответ. Я не могу этого сделать. База данных огромная. Мне нужно только около 1% данных.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.