草庐IT

c++ - 如何将共享库链接到 linux 中的其他共享库?

我的应用程序动态加载liba.so(使用dlopen)。liba.so使用libb.so所以我想将liba.so链接到libb.so。如何在Linux中执行此操作?提前致谢。 最佳答案 如果你自己构建liba.so,你需要用-l选项链接它gcc-oliba.soliba.o-L/libb/path-lb如果您没有liba源,也许您可​​以创建libawrapper.so链接到liba和libb并动态加载这个库gcc-olibawrap.so-L/liba/-L/libb/-la-lb 关

c - 使用 __attribute__ ((section "STACK")) 将变量准确地放在 ("STACK"部分中可能有什么意义?

Ingccdoc给出了使用section的一个原因。这个原因是映射到特殊硬件。但这似乎不是我的情况。所以我给了一个任务来修改我们在项目中使用的共享库。它是一个Linux库。库中有变量声明让我感到困惑。它们看起来像这样(大致):staticintmy_var_1__attribute__((section("STACK")))=0;更新1:有十几个变量以这种方式定义(__attribute__((section("STACK"))))更新2:my_var_1不是常量。my_var_1可能会在初始化期间更改代码:my_var_1=atoi(getenv("MY_VAR_1")?getenv

c - 使用 __attribute__ ((section "STACK")) 将变量准确地放在 ("STACK"部分中可能有什么意义?

Ingccdoc给出了使用section的一个原因。这个原因是映射到特殊硬件。但这似乎不是我的情况。所以我给了一个任务来修改我们在项目中使用的共享库。它是一个Linux库。库中有变量声明让我感到困惑。它们看起来像这样(大致):staticintmy_var_1__attribute__((section("STACK")))=0;更新1:有十几个变量以这种方式定义(__attribute__((section("STACK"))))更新2:my_var_1不是常量。my_var_1可能会在初始化期间更改代码:my_var_1=atoi(getenv("MY_VAR_1")?getenv

c - 如何在ubuntu上编译doom?

我正在尝试编译原始厄运的源代码作为学习C的一种方式。我从github下载了它。并修复了i_video.c第49行中的明显错误(errnos.h->errno.h)。我现在明白了:m_misc.c:257:5:warning:initializationfromincompatiblepointertype[enabledbydefault]m_misc.c:257:5:warning:(nearinitializationfor‘defaults[14].location’)[enabledbydefault]m_misc.c:257:5:error:initializerelemen

c - 如何在ubuntu上编译doom?

我正在尝试编译原始厄运的源代码作为学习C的一种方式。我从github下载了它。并修复了i_video.c第49行中的明显错误(errnos.h->errno.h)。我现在明白了:m_misc.c:257:5:warning:initializationfromincompatiblepointertype[enabledbydefault]m_misc.c:257:5:warning:(nearinitializationfor‘defaults[14].location’)[enabledbydefault]m_misc.c:257:5:error:initializerelemen

c++ - Linux 可执行文件作为共享库

我正在尝试编译一个可执行文件,我也想将其用作共享库。当我清楚地编译并将其链接为“可执行”时-一切正常-文件可以启动并正常工作。在这个阶段,我无法正确地将其他库与其链接起来(日志中有大量的重新定义)。当我尝试添加选项-Fpic-shared-程序成功编译,但从段错误开始。我怎样才能同时使它成为可执行文件和“共享库”? 最佳答案 单个文件不能同时是共享库和可执行文件。但是您可以两次链接您的目标文件以制作两者。它会像这样:g++-c-omodule.omodule.cpp#createanobjectthathasnomain()g++-

c++ - Linux 可执行文件作为共享库

我正在尝试编译一个可执行文件,我也想将其用作共享库。当我清楚地编译并将其链接为“可执行”时-一切正常-文件可以启动并正常工作。在这个阶段,我无法正确地将其他库与其链接起来(日志中有大量的重新定义)。当我尝试添加选项-Fpic-shared-程序成功编译,但从段错误开始。我怎样才能同时使它成为可执行文件和“共享库”? 最佳答案 单个文件不能同时是共享库和可执行文件。但是您可以两次链接您的目标文件以制作两者。它会像这样:g++-c-omodule.omodule.cpp#createanobjectthathasnomain()g++-

c - malloc.c 中如何/在哪里使用 sbrk?

我在AdvancedUnixProgramming(以及其他几本书)中读到Linuxmalloc()使用Linux系统调用sbrk()来请求内存操作系统。我正在查看glibcmalloc.c代码,我可以在注释中看到很多提及sbrk()的地方,但没有在代码中直接提及。malloc()从操作系统请求内存时,如何/在哪里引用/使用sbrk()?(这可能是我对如何从C运行时库进行系统调用的普遍误解。如果是这样,我很想知道它们是如何进行的??) 最佳答案 Glibc的malloc.c通过调用存储在__morecore全局函数指针中的函数来请求

c - malloc.c 中如何/在哪里使用 sbrk?

我在AdvancedUnixProgramming(以及其他几本书)中读到Linuxmalloc()使用Linux系统调用sbrk()来请求内存操作系统。我正在查看glibcmalloc.c代码,我可以在注释中看到很多提及sbrk()的地方,但没有在代码中直接提及。malloc()从操作系统请求内存时,如何/在哪里引用/使用sbrk()?(这可能是我对如何从C运行时库进行系统调用的普遍误解。如果是这样,我很想知道它们是如何进行的??) 最佳答案 Glibc的malloc.c通过调用存储在__morecore全局函数指针中的函数来请求

c - 检测退出时释放的 C 内存 'leaks'

假设我有一个C程序(在Linux下运行),它处理许多数据结构,有些很复杂,其中一些可以增长和收缩,但通常不应随时间增长。观察到该程序的RSS随着时间的推移逐渐增加(超过内存碎片可以解释的程度)。我想找到泄漏的东西。在valgrind下运行是这里明显的建议,但是valgrind(使用--leak-check=full和--show-reachables=yes)显示没有泄漏。我相信这是因为数据结构本身在退出时被正确地释放了,但其中一个在程序的生命周期中正在增长。例如,可能有一个随时间线性增长的链表,有人忘记删除列表中的资源,但退出清理在退出时正确地释放了列表中的所有项目。当然,如果它们被