Используйте библиотеку Linux C ++ с PROC PROTO в SAS

Я хотел бы использовать свою собственную библиотеку с SAS PROC PROTO. Я использую университетское издание, которое работает на Linux.

Я пытался сделать следующее:
Скомпилируйте мой исходный файл в статическую библиотеку (потому что я не уверен, какая библиотека libc или другая стандартная библиотека доступна или в какой версии ваша может быть доступна, поэтому я хотел бы включить их все). Я использовал следующее: g++ -static -std=c++11 -c foo.cpp -o libfoo.o а потом ar rcs libfoo.a libfoo.o

Затем я загружаю libfoo.a на платформу SAS и создаю SAS-программу, подобную следующей:

%let root = /folders/foobar/;

libname lib "&root";

proc proto package=lib.Foobar
Label="Foobar" ;

link "&root/libfoo.a" ;

Однако тогда я получаю следующую ошибку:

64         link "&root/libfoo.a" ;
65
66         OPTIONS NONOTES NOSTIMER NOSOURCE NOSYNTAXCHECK;
ERROR: Unable to load 'libfoo.a'.
ERROR: Extension Load Failure: OS Error: -1 (/folders/foobar/libfoo.a: invalid ELF header)
ERROR: Unable to load extension: (/folders/foobar/libtrie.a)
ERROR: Could not find extension: (libtrie.a)
ERROR: Could not find extension: (libtrie.a)

Оттуда я предполагаю, что SAS ожидает динамическую библиотеку. поэтому я полагаю, что сначала нужно статически связать, чтобы включить все зависимые библиотеки, а затем связать динамически, чтобы SAS мог загрузить его ..

Это правильный подход и как лучше это сделать на Linux / g ++?

РЕДАКТИРОВАТЬ 1:

поэтому динамически связывайте код, однако, как и предполагалось, glibc не является тем же в среде SAS. Я получаю следующее сообщение об ошибке:

ERROR: Extension Load Failure: OS Error: -1 (/usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.14' not found (required by
/folders/foobar/libfoo.so))

РЕДАКТИРОВАТЬ 2:
Я попытался немного повозиться с опциями связывания:

g++ -std=c++11 -fPIC -static /usr/lib64/libc.a -shared foo.cpp -static-libstdc++ -static-libgcc -o libfoo2.so

однако это дает похожую ошибку в SAS:

ERROR: Extension Load Failure: OS Error: -1 (/lib64/libc.so.6: version `GLIBC_2.14' not found (required by
/folders/myshortcuts/Desktop/libfoo2.so))

Пока я возился, я понял, что readelf дает информацию о необходимых библиотеках, однако libc.so остается всегда нужным, но недоступным в среде SAS.

2

Решение

Итак, я выяснил, что среда из Centos 6.6 достаточно близка (возможно, все, что нужно, это libc в версии 2.12) для университетского дистрибутива SAS.

С помощью wallstprog Я понял, что мне нужно установить g ++ 4.8.2 на Centos, чтобы иметь возможность компилировать c ++ 11 (так как это версия, написанная на c ++ 98 и, следовательно, может быть собрана из исходного кода на Centos).

Тогда это становится тривиальным для компиляции:

g++ -fPIC -std=c++11 -c foo.cpp -o foo.o
g++ foo.o -shared -static-libstc++ -o libfoo.so

И это прошло стадию ссылки в Propro Pro нормально.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]