如何从"开始组..结束组"链接器选项构建文件列表
How to construct a list of files from the `start group ... end group` linker option
我已经按照这里的说明构建了 V8 静态库。现在我正在尝试使用它来创建示例 HelloWorld 应用程序。问题是文档没有说明我需要在示例项目中引用构建中的哪些文件。它们仅显示如何使用g++
编译项目:
g++ -I. -Iinclude samples/hello-world.cc -o hello-world -Wl,--start-group
out.gn/x64.release/obj/{libv8_{base,libbase,external_snapshot,libplatform,libsampler},
third_party/icu/libicu{uc,i18n},src/inspector/libinspector}.a
-Wl,--end-group -lrt -ldl -pthread -std=c++0x
我已经阅读了一些关于g++
选项的信息,并假设从链接器选项构造的文件列表是我在编译时需要在项目中引用--start-group...--end-group
。但是我不明白如何构建该文件列表。我以为会有这样的文件
out.gn/x64.release/obj/libv8_base
out.gn/x64.release/obj/libv8_libbase
...
但他们不在那里。相反,有文件夹:
out.gn/x64.release/obj/v8_base
out.gn/x64.release/obj/v8_libbase
out.gn/x64.release/obj/v8_external_snapshot
...
与.obj
文件。我错过了什么?
命令行片段:
-Wl,--start-group
out.gn/x64.release/obj/{libv8_{base,libbase,external_snapshot,libplatform,libsampler},
third_party/icu/libicu{uc,i18n},src/inspector/libinspector}.a
-Wl,--end-group
将在g++
看到它之前被 shell 展开,并将成为:
-Wl,--start-group
out.gn/x64.release/obj/libv8_base.a
out.gn/x64.release/obj/libv8_libbase.a
out.gn/x64.release/obj/libv8_external_snapshot.a
out.gn/x64.release/obj/libv8_libplatform.a
out.gn/x64.release/obj/libv8_libsampler.a
out.gn/x64.release/obj/third_party/icu/libicuuc.a
out.gn/x64.release/obj/third_party/icu/libicui18n.a
out.gn/x64.release/obj/src/inspector/libinspector.a
-Wl,--end-group
这将告诉g++
请求链接器,ld
,链接 所有静态库:
out.gn/x64.release/obj/libv8_base.a
out.gn/x64.release/obj/libv8_libbase.a
out.gn/x64.release/obj/libv8_external_snapshot.a
out.gn/x64.release/obj/libv8_libplatform.a
out.gn/x64.release/obj/libv8_libsampler.a
out.gn/x64.release/obj/third_party/icu/libicuuc.a
out.gn/x64.release/obj/third_party/icu/libicui18n.a
out.gn/x64.release/obj/src/inspector/libinspector.a
而且,由于要检查--start-group ... --end-group
这组库以递归方式在符号解析中,直到 它不会产生新的未定义引用(而不是每个引用一次) 按顺序,默认情况下)
如果您的构建树不包含该组静态库,则 可能是您正在构建的 Git 分支不一致 以及您正在遵循的文档。在这种情况下,您可以查看 对于有问题的静态库 - 八个*.a
文件 - 其他地方 在您的树中并替换:
out.gn/x64.release/obj/{libv8_{base,libbase,external_snapshot,libplatform,libsampler},
third_party/icu/libicu{uc,i18n},src/inspector/libinspector}.a
包含您找到的库的显式绝对或相对文件名列表。然后 试试你的运气与构建。
如果您找不到任何候选人,那么您正在关注的文档 与您正在使用的构建树无可救药地失衡。
相关文章:
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- Win32编译器选项和内存分配
- C/C++预处理器是否可以检测一些编译器选项
- 是否有C++编译器选项允许激进地删除所有函数调用,并将参数传递给具有空体的函数
- 将--whole archive链接器选项与CMake和具有其他库依赖项的库一起使用
- 通过选项卡的文本设置QTabWidget顺序
- 通过ccmake在cmake中缓存依赖选项
- 如何传递多个 std::文件系统选项?
- 基于编译器选项的编译二进制路径
- "perf_event_attr"结构的"read_format"属性的选项到底是什么?
- 如何应用 libcurl 的持久连接选项
- 文件中.dat Dlib 选项
- LLVM | codegen 用于带有命令行选项的程序输入功能
- 编译 Boost 时在 OS X 上的"ld:未知选项:-soname"
- 按钮悬停在 QT 中垂直布局的选项卡小部件中不起作用
- Visual Studio C++ 它只构建选项卡中显示的文件吗?
- 在C++不适用于猜数字游戏的情况下再次播放选项
- Qt5 用户界面编译器:-i 选项不可用
- CMake - 更改共享库链接选项
- 从 C++ 运行的进程偶尔会错过某个选项