我有一个BUILD.gn,其中我想包含一个位于usr/lib中的共享库。我参考了这个话题How to include a shared library in chromium's gn file?
但是.so文件并没有链接到主函数。以下是BUILD.gn代码:-
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
]
}但是,在执行这个命令时,我得到了一个错误:-
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.我已经调查了许多网站,但我没有得到我错在哪里?
发布于 2022-02-06 16:03:56
这条线看上去可疑:
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
你给它的是文件而不是目录。
相反,试着:
lib_dirs = [ "/usr/lib" ]应该将链接行更改为
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以查找它。
https://stackoverflow.com/questions/67432995
复制相似问题