Настройка библиотек для кросс-компиляции
Felix
Пункты: 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
Пункты: 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
Пункты: 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
Пункты: 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
Пункты: 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
Пункты: 83540
Регистрация: 14.08.2009
Цитата
cannot find -lpq
Посмотрите - есть ли она там
ls -l $BRSYSROOT/usr/lib/*pq.*
Felix
Пункты: 1285
Регистрация: 28.09.2016
Цитата Цитата
cannot find -lpq
Посмотрите - есть ли она там
ls -l $BRSYSROOT/usr/lib/*pq.*
В результате команды:
ls -l $BRSYSROOT/usr/lib/*pq.*
Ничего не было найдено. Я так понимаю мне нужна библиотека libpq.so?
Felix
Пункты: 1285
Регистрация: 28.09.2016
Всё разобрался, при сборке системы в buildroot, в menuconfig не добавил библиотеку libpqxx. Пересобрал, нужные бибилиотеки появились теперь компилирует, спасибо.
sasamy
Пункты: 83540
Регистрация: 14.08.2009