小编Bri*_*ett的帖子

如何在链接到可执行文件时强制将对象文件包含在静态库中?

我有一个C++项目,由于其目录结构被设置为静态库A,它链接到共享库B,它链接到可执行文件C.(这是使用CMake的一个跨平台的项目,所以在Windows上我们得到的A.lib,B.dllC.exe,和在Linux上我们得到的libA.a,libB.soC).图书馆A有一个初始化函数(A_init在定义A/initA.cpp),即从库调用B的初始化函数(B_init,定义于B/initB.cpp),从C主要调用.因此,当链接时B,A_init(和所有符号中定义的initA.cpp)被链接到B(这是我们期望的行为).

问题在于,A库还定义了一个动态加载的函数(Af,在A/Afort.f其中定义)(即LoadLibrary/ GetProcAddress在Windows上和dlopen/ dlsym在Linux上).由于没有Af来自库的引用B,A/Afort.o因此不包括符号B.在Windows上,我们可以通过使用pragma人工创建引用:

#pragma comment (linker, "/export:_Af")
Run Code Online (Sandbox Code Playgroud)

由于这是一个pragma,它只适用于Windows(使用Visual Studio 2008).为了让它在Linux上运行,我们尝试将以下内容添加到A/initA.cpp:

extern void Af(void);
static void (*Af_fp)(void) = …
Run Code Online (Sandbox Code Playgroud)

c++ linux linker static-libraries

22
推荐指数
3
解决办法
1万
查看次数

Windows 中 GNU ld 标志 --whole-archive 的等价物是什么?

我有一个静态库A和一个动态库B,链接到A(在 LinuxA/libA.a和上B/libB.so,在 WindowsA/A.lib和上B/B.dll)。在 Linux 上,我可以使用以下链接行B包含所有符号:A

g++ -shared -o libB.so B_init.o ... -Wl,--whole-archive -L../A -lA -Wl,--no-whole-archive
Run Code Online (Sandbox Code Playgroud)

我该如何在 Windows 上执行相同的操作?(假设我已正确导出带有A正确__declspec(dllexport)装饰的符号。)

windows linker visual-studio-2008

5
推荐指数
0
解决办法
1043
查看次数

如何创建具有所有层次结构的目录?

给出以下XML文档:

<Include>
  <Feature Title="A">
    <Feature Title="1" />
    <Feature Title="2" />
  </Feature>
  <Feature Title="B">
    <Feature Title="3">
      <Feature Title="i" />
      <Feature Title="ii" />
    </Feature>
    <Feature Title="4" />
  </Feature>
</Include>
Run Code Online (Sandbox Code Playgroud)

我需要生成一个看起来像这样的文本文件:

; Header

A
A/1
A/2
B
B/3
B/3/i
B/3/ii
B/4
Run Code Online (Sandbox Code Playgroud)

我实现这一目标的最佳尝试是XSL样式表:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:output method="text" omit-xml-declaration="yes" />
  <xsl:strip-space elements="*" />

  <xsl:template match="/">
    <xsl:text>; Header&#x0A;&#x0D;&#x0A;&#x0D;</xsl:text>
    <xsl:apply-templates select="//Feature" /></xsl:template>

  <xsl:template match="Feature">
    <xsl:value-of select="@Title" /><xsl:text>&#x0A;&#x0D;</xsl:text>
  </xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)

但这是产生输出:

; Header

A
1
2
B
3
i
ii
4
Run Code Online (Sandbox Code Playgroud)

如何在输出中显示所有级别的层次结构?

xslt

2
推荐指数
1
解决办法
1066
查看次数