Ограничение видимости символов, когда соединение совместно использовало библиотеки

это не проблема R.

с помощью gdal, у меня есть это:

gdalinfo --debug on H14_2011010400.grib 

GRIB: Undefined parameter table (center 98-0 table 228).
GRIB: Undefined parameter table (center 98-0 table 228).
GRIB: Undefined parameter table (center 98-0 table 228).
GRIB: Undefined parameter table (center 98-0 table 228).
GRIB: Problems with ReadGrib1Record called by ReadGrib2Record
Inside ReadGrib1Record
GRIB1 GDS: Expect PV = 255 != 33

ERROR 4: H14_2011010400.grib is a grib file, but no raster dataset was successfully identified.
gdalinfo failed - unable to open 'H14_2011010400.grib'.

Я думаю, что ваш файл grib неправильно закодирован, попробуйте установить wgrib для получения больше информации.

45
задан Die in Sente 2 February 2009 в 16:52
поделиться

3 ответа

GNU ld может сделать это на платформах ELF.

Вот то, как сделать это со сценарием версии компоновщика:

/* foo.c */
int foo() { return 42; }
int bar() { return foo() + 1; }
int baz() { return bar() - 1; }

gcc -fPIC -shared -o libfoo.so foo.c && nm -D libfoo.so | grep ' T '

По умолчанию, все символы экспортируются:

0000000000000718 T _fini
00000000000005b8 T _init
00000000000006b7 T bar
00000000000006c9 T baz
00000000000006ac T foo

Скажем, Вы хотите экспортировать [только 116] и baz(). Создайте "сценарий версии" libfoo.version:

FOO {
  global: bar; baz; # explicitly list symbols to be exported
  local: *;         # hide everything else
};

Передача это компоновщику:

gcc -fPIC -shared -o libfoo.so foo.c -Wl,--version-script=libfoo.version

Наблюдают экспортируемые символы:

nm -D libfoo.so | grep ' T '
00000000000005f7 T bar
0000000000000609 T baz
67
ответ дан Employed Russian 8 November 2019 в 00:50
поделиться

Я думаю самый легкий способ сделать, который добавляет -fvisibility=hidden к gcc опциям, и явно обнародуйте видимость некоторых символов в коде (__attribute__((visibility("default")))). См. документацию здесь .

может быть способ выполнить это ld сценариями компоновщика, но я не знаю много об этом.

38
ответ дан a3f 8 November 2019 в 00:50
поделиться

Код, созданный для вызова любых экспортируемых функций или использования любых экспортируемых глобальных переменных, менее эффективен, чем те, которые не экспортируются. Здесь задействован дополнительный уровень косвенности. Это относится к любой функции, которая может быть экспортирована во время компиляции . gcc по-прежнему будет производить дополнительное косвенное обращение к функции, которая позже не экспортируется скриптом компоновщика. Таким образом, использование атрибута видимости даст лучший код, чем сценарий компоновщика.

7
ответ дан 26 November 2019 в 21:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: