Ник:
Пароль:

Контакты

E-mail: info@starterkit.ru
тел.: +7 922 680-21-73
тел.: +7 922 680-21-74
Телеграм: t.me/starterkit_ru

Способы оплаты

User Info


Добро пожаловать,
Guest

Регистрация или входРегистрация или вход
Потеряли пароль?Потеряли пароль?

Ник:
Пароль:

ПользователейПользователей:2
Поисковых ботовПоисковых ботов:3
ГостейГостей:1

ОбновитьПодробнееВсегоВсего:6
Форум » starterkit.ru » Embedded Linux
Настройка библиотек для кросс-компиляции
Felix
Добавлено 01.03.2018 09:59
0
Сообщение: 1
Felix
0

Пункты: 1285
Регистрация: 28.09.2016
Добрый день. Хочу скомпилировать программку (на C) на виртуальной машине под свою плату. Для этого использую кросс-компилятор .../buildroot-2017.08-sk/output/host/usr/bin/arm-linux-gnueabihf-gcc. В самой программе подключаю библиотеку libpq-fe.h (предварительно установив её на виртуальную машину sudo apt-get install libpq-dev). Вопрос как указать кросс-компилятору на эту библиотеку?
Пробовал компилировать обычным компилятором gcc:
gcc -o podkluch podkluch2.c I/usr/include/postgresql -lpq
Всё работает компилирует, а при кросс компиляции пишет:
Код
vova@vova-VirtualBox:~/sbor/buildroot-2017.08-sk/output/host/usr/bin$ ./arm-linux-gnueabihf-gcc podkluch2.c -I/usr/include/postgresql
arm-linux-gnueabihf-gcc: WARNING: unsafe header/library path used in cross-compilation: '-I/usr/include/postgresql'
/tmp/ccz8CnAM.o: In function `main':
podkluch2.c:(.text+0xe): undefined reference to `PQconnectdb'
podkluch2.c:(.text+0x16): undefined reference to `PQstatus'
podkluch2.c:(.text+0x3c): undefined reference to `PQfinish'
collect2: error: ld returned 1 exit status
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 01.03.2018 11:57 Сообщение: 2
sasamy
4.71

Пункты: 83540
Регистрация: 14.08.2009
Цитата

предварительно установив её на виртуальную машину sudo apt-get install libpq-dev


для кросскомпиляции хостовые библиотеки и заголовки не нужны

Цитата

а при кросс компиляции пишет:
Код
vova@vova-VirtualBox:~/sbor/buildroot-2017.08-sk/output/host/usr/bin$ ./arm-linux-gnueabihf-gcc podkluch2.c -I/usr/include/postgresql


для кросскомпиляции нужно указывать кросскомпилятор, заголовки и библиотеки из buildroot, например

export BRGCC=/home/vova/sbor/buildroot-2017.08-sk/output/host/usr/bin/arm-linux-gnueabihf-gcc

export BRSYSROOT=/home/vova/sbor/buildroot-2017.08-sk/output/staging

$BRGCC -o podkluch podkluch2.c -I$BRSYSROOT/usr/include/postgresql -lpq --sysroot=$BRSYSROOT
Спуститься к концу Подняться к началу
Персональная информация
Felix
Добавлено 01.03.2018 18:01 Сообщение: 3
Felix
0

Пункты: 1285
Регистрация: 28.09.2016
Цитата

для кросскомпиляции нужно указывать кросскомпилятор, заголовки и библиотеки из buildroot, например

export BRGCC=/home/vova/sbor/buildroot-2017.08-sk/output/host/usr/bin/arm-linux-gnueabihf-gcc

export BRSYSROOT=/home/vova/sbor/buildroot-2017.08-sk/output/staging

$BRGCC -o podkluch podkluch2.c -I$BRSYSROOT/usr/include/postgresql -lpq --sysroot=$BRSYSROOT


Не знаю правильно ли я понял, нужно директорию /usr (где находится заголовок libpq-fe.h) скопировать в директорию где находятся библиотеки кросс-компилятора (/home/vova/sbor/buildroot-2017.08-sk/output/staging)
и потом уже осуществить кросс-компиляцию:
$BRGCC -o podkluch podkluch2.c -I$BRSYSROOT/usr/include/postgresql -lpq --sysroot=$BRSYSROOT
?
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 01.03.2018 18:33 Редактировалось 01.03.2018 18:39 Сообщение: 4
sasamy
4.71

Пункты: 83540
Регистрация: 14.08.2009
Цитата

Не знаю правильно ли я понял, нужно директорию /usr (где находится заголовок libpq-fe.h) скопировать в директорию где находятся библиотеки кросс-компилятора


просто выполните три команды на своем компьютере в директории где лежит исходный код podkluch2.c

1)
export BRGCC=/home/vova/sbor/buildroot-2017.08-sk/output/host/usr/bin/arm-linux-gnueabihf-gcc

2)
export BRSYSROOT=/home/vova/sbor/buildroot-2017.08-sk/output/staging

3)
$BRGCC -o podkluch podkluch2.c -I$BRSYSROOT/usr/include/postgresql -lpq --sysroot=$BRSYSROOT


1) и 2) создают переменные окружения чтобы не писать длинные пути в 3), их надо выполнить один раз, непосредствено компиляция в 3)
Спуститься к концу Подняться к началу
Персональная информация
Felix
Добавлено 01.03.2018 18:57 Сообщение: 5
Felix
0

Пункты: 1285
Регистрация: 28.09.2016
Цитата
Цитата

Не знаю правильно ли я понял, нужно директорию /usr (где находится заголовок libpq-fe.h) скопировать в директорию где находятся библиотеки кросс-компилятора


просто выполните три команды на своем компьютере в директории где лежит исходный код podkluch2.c

1)
export BRGCC=/home/vova/sbor/buildroot-2017.08-sk/output/host/usr/bin/arm-linux-gnueabihf-gcc

2)
export BRSYSROOT=/home/vova/sbor/buildroot-2017.08-sk/output/staging

3)
$BRGCC -o podkluch podkluch2.c -I$BRSYSROOT/usr/include/postgresql -lpq --sysroot=$BRSYSROOT


1) и 2) создают переменные окружения чтобы не писать длинные пути в 3), их надо выполнить один раз, непосредствено компиляция в 3)


Вот что пишет:

vova@vova-VirtualBox:~$ export BRGCC=/home/vova/sbor/buildroot-2017.08-sk/output/host/usr/bin/arm-linux-gnueabihf-gcc
vova@vova-VirtualBox:~$ export BRSYSROOT=/home/vova/sbor/buildroot-2017.08-sk/output/staging
vova@vova-VirtualBox:~$ cd ~/programs
vova@vova-VirtualBox:~/programs$ $BRGCC -o podkluch2 podkluch2.c -I$BRSYSROOT/usr/include/postgresql -lpq --sysroot=$BRSYSROOT
/home/vova/sbor/buildroot-2017.08-sk/output/host/opt/ext-toolchain/bin/../lib/gcc/arm-linux-gnueabihf/6.3.1/../../../../arm-linux-gnueabihf/bin/ld: cannot find -lpq
collect2: error: ld returned 1 exit status
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 01.03.2018 19:47 Сообщение: 6
sasamy
4.71

Пункты: 83540
Регистрация: 14.08.2009
Цитата

cannot find -lpq


Посмотрите - есть ли она там

ls -l $BRSYSROOT/usr/lib/*pq.*
Спуститься к концу Подняться к началу
Персональная информация
Felix
Добавлено 01.03.2018 23:09 Сообщение: 7
Felix
0

Пункты: 1285
Регистрация: 28.09.2016
Цитата
Цитата

cannot find -lpq


Посмотрите - есть ли она там

ls -l $BRSYSROOT/usr/lib/*pq.*


В результате команды:
ls -l $BRSYSROOT/usr/lib/*pq.*
Ничего не было найдено. Я так понимаю мне нужна библиотека libpq.so?
Спуститься к концу Подняться к началу
Персональная информация
Felix
Добавлено 02.03.2018 05:33 Сообщение: 8
Felix
0

Пункты: 1285
Регистрация: 28.09.2016
Всё разобрался, при сборке системы в buildroot, в menuconfig не добавил библиотеку libpqxx. Пересобрал, нужные бибилиотеки появились теперь компилирует, спасибо.
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 02.03.2018 09:30 Сообщение: 9
sasamy
4.71

Пункты: 83540
Регистрация: 14.08.2009
Цитата

Я так понимаю мне нужна библиотека libpq.so?


да

Цитата

при сборке системы в buildroot, в menuconfig не добавил библиотеку libpqxx


Цитата

libpqxx is the official C++ client API for PostgreSQL


вам она не нужна - у вас программа на С, libpq.so в составе

[*] postgresql

http://www.starterkit.ru/html/index.php?name=forum&op=view&id=28693&last#28864
Спуститься к концу Подняться к началу
Персональная информация
Форум » starterkit.ru » Embedded Linux