Компиляция против gpsd на OpenWRT - соединение не удается - PullRequest
0 голосов
/ 18 октября 2019

Я пытаюсь скомпилировать инструмент, который использует gps.h, но моя компиляция, похоже, дает сбой каждый раз, когда он пытается связаться с libgps. Я получаю сообщение об ошибке:

/opt/openwrt-sdk/staging_dir/toolchain-arm_cortex-a9+vfpv3_gcc-7.3.0_musl_eabi/bin/../lib/gcc/arm-openwrt-linux-muslgnueabi/7.3.0/../../../../arm-openwrt-linux-muslgnueabi/bin/ld: cannot find -lgps

Это команда, которую я компилирую:

arm-openwrt-linux-gcc -o ./bin/eagle src/main.c -I./src -I/opt/openwrt-sdk/staging_dir/target-arm_cortex-a9+vfpv3_musl_eabi/usr/include -static -L/opt/openwrt-sdk/staging_dir/target-arm_cortex-a9+vfpv3_musl_eabi/usr/lib  -lpthread -lgps

Базовый код для справки:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <gps.h>

int main(void)
{
  int rc;
  struct gps_data_t gps_data;
  if ((rc = gps_open("localhost", "2947", &gps_data)) == -1)
  {
    printf("code: %d, reason: %s\n", rc, gps_errstr(rc));
    return 1;
  }
  gps_stream(&gps_data, WATCH_ENABLE | WATCH_JSON, NULL);

  return 0;
}

Инекоторые списки каталогов в моем наборе инструментов - насколько я могу судить, libgps успешно скомпилирован:

# ls -lah /opt/openwrt-sdk/staging_dir/target-arm_cortex-a9+vfpv3_musl_eabi/usr/include/ | grep gps

-rw-rw-r-- 1 root root  80K Sep  7  2017 gps.h

# ls -lah /opt/openwrt-sdk/staging_dir/target-arm_cortex-a9+vfpv3_musl_eabi/usr/lib/ | grep gps

lrwxrwxrwx 1 root root   16 Oct 17 18:46 libgps.so -> libgps.so.23.0.0
lrwxrwxrwx 1 root root   16 Oct 17 18:46 libgps.so.23 -> libgps.so.23.0.0
-rwxr-xr-x 1 root root 101K Oct 17 18:46 libgps.so.23.0.0

Заранее большое спасибо за любую помощь.

1 Ответ

0 голосов
/ 11 ноября 2019

Ваша командная строка ссылки содержит '-static', которая запрещает связывание с общими библиотеками * .so (также называемые общими объектами, следовательно, 'так'), но все же разрешает связывание с * .a статическими библиотеками ссылок (также называемыми архивами). См .: https://gcc.gnu.org/onlinedocs/gcc/Link-Options.html

В каталоге, содержимое которого вы перечислили, и в котором командная строка ссылки направлена ​​на использование флага '-L', есть общий объект libgps.so, но нет статического-link библиотека libgps.a.

Это не дает компоновщику никакой возможности удовлетворить зависимость времени компоновки от libgps. Единственный способ удовлетворить это, используя libgps.so, был отключен с помощью '-static'.

Чтобы исправить, либо:

  1. Измените рецепт компиляции инструмента, чтобыудалите '-static' из командной строки ссылки, чтобы разрешить использование общего объекта, или
  2. измените рецепт компиляции gpsd, чтобы вызвать сборку статической ссылки libgps.a, либо вдополнение к libgps.so или вместо него.
...