首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在gn中包含共享库

如何在gn中包含共享库
EN

Stack Overflow用户
提问于 2021-05-07 10:13:06
回答 1查看 638关注 0票数 0

我有一个BUILD.gn,其中我想包含一个位于usr/lib中的共享库。我参考了这个话题How to include a shared library in chromium's gn file?

但是.so文件并没有链接到主函数。以下是BUILD.gn代码:-

代码语言:javascript
复制
executable("check") {
  sources = [ "check.cpp" ]
  deps = [
    ":SampleCheck",
    ]
  lib_dirs = [ "//usr/lib/SampleFile.so" ]
  libs = [ "SampleFile" ]
}
shared_library("SampleCheck") {
  sources = [
    "SampleCheck.h", // Header file for functions
  ]
}

但是,在执行这个命令时,我得到了一个错误:-

代码语言:javascript
复制
ninja: Entering directory `out'
[0/1] Regenerating ninja files
[1/1] LINK main
FAILED: main 
g++ -Wl,-rpath=\$ORIGIN/ -Wl,-rpath-link= -L../usr/lib/SampleFile.so -o main -Wl,--start-group @main.rsp  -Wl,--end-group -lSampleDll.so
/usr/bin/ld: cannot find -lSampleDll.so
collect2: error: ld returned 1 exit status
ninja: build stopped: subcommand failed.

我已经调查了许多网站,但我没有得到我错在哪里?

EN

回答 1

Stack Overflow用户

发布于 2022-02-06 16:03:56

这条线看上去可疑:

代码语言:javascript
复制
  lib_dirs = [ "//usr/lib/sampleFile.so" ]

GN使用//表示GN项目的根,其标记为.gn文件的存在。lib_dirs知道允许像您这样的构造的绝对文件系统;您可以只使用一个正斜杠来指示根文件系统。

此外,lib_dirs的目的是将目录添加到链接器的搜索路径:https://gn.googlesource.com/gn/+/master/docs/reference.md#var_lib_dirs

你给它的是文件而不是目录。

相反,试着:

代码语言:javascript
复制
  lib_dirs = [ "/usr/lib" ]

应该将链接行更改为

代码语言:javascript
复制
g++ -Wl,-rpath=\$ORIGIN/ -Wl,-rpath-link= -L/usr/lib -o main -Wl,--start-group @main.rsp  -Wl,--end-group -lSampleDll.so

这可能更接近您所期望的;链接器将看到所需的SampleDll.so,并将搜索/usr/lib以查找它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67432995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档