gpt4 book ai didi

c++ - 在 SAS 中使用带有 PROC PROTO 的 linux c++ 库

转载 作者:太空狗 更新时间:2023-10-29 12:41:18 26 4
gpt4 key购买 nike

我想将我自己的库与 SAS PROC PROTO 一起使用。我正在使用似乎在 Linux 上运行的大学版。

我尝试执行以下操作:将我的源文件编译成一个静态库(因为我不确定哪个 libc 或其他标准库可用,或者你可以在哪个版本中可用,所以我想将它们全部包含在内)。我使用了以下内容:g++ -static -std=c++11 -c foo.cpp -o libfoo.o 然后是 ar rcs libfoo.a libfoo.o

然后我在SAS平台上上传了libfoo.a,做了一个如下的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 环境中不可用。

最佳答案

因此,我发现 Centos 6.6 的环境与 SAS 大学发行版足够接近(也许只需要 2.12 版中的 libc)。

wallstprog的帮助下我发现我需要在 Centos 上安装 g++ 4.8.2 才能编译 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

这很好地通过了 proc proto 中的链接阶段。

关于c++ - 在 SAS 中使用带有 PROC PROTO 的 linux c++ 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43167806/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com