gcc/g++/ld缓存?

gcc/g++/ld缓存?,gcc,g++,ld,Gcc,G++,Ld,我正在开发一个程序,它可以生成c/c++库的某些部分。 例如,它创建目录-lib1、lib2、,利本。 对于每个库,它生成c/c++代码+Makefile,然后使用gcc/g+++ld,最后从库中调用代码。 现在的问题是,如果lib1有一个函数fun和libN,那么当从libN调用fun时,使用lib1。 在v4.7之前,我尝试过不同版本的gcc/g++ 现在的问题是,如果lib1有一个函数fun和libN,那么当从libN调用fun时,使用lib1 假设您谈论的是共享库,而不是归档库(在归档库

我正在开发一个程序,它可以生成c/c++库的某些部分。 例如,它创建目录-lib1、lib2、,利本。 对于每个库,它生成c/c++代码+Makefile,然后使用gcc/g+++ld,最后从库中调用代码。 现在的问题是,如果lib1有一个函数
fun
和libN,那么当从libN调用
fun
时,使用lib1。 在v4.7之前,我尝试过不同版本的gcc/g++

现在的问题是,如果lib1有一个函数fun和libN,那么当从libN调用fun时,使用lib1

假设您谈论的是共享库,而不是归档库(在归档库中,您会得到一个多定义的符号错误)

是的,这就是它应该如何工作的,并且一直在UNIX上工作。缓存与此无关

如果您在ELF平台上,您可能可以通过使用
-Wl,-Bsymbolic
,让它在更多的窗口中工作,但您将与默认的系统行为作斗争,应该会遇到困难和许多意外的问题。如果
fun
不需要从
libX
公开,那么隐藏的就是你的朋友

由于您正在为
lib1
生成代码
libN
,使用例如
libX\u-fun
而不是
fun
可能更容易避免名称冲突。这也将更加便携,因为它将在任何地方工作

更新:

根据接口规范,函数名必须非常有趣

根据世卫组织的接口规范

显然,您可以同时控制主程序和库。因此,您可以并且可能应该更改接口规范以避免此问题

现在的问题是,如果lib1有一个函数fun和libN,那么当从libN调用fun时,使用lib1

假设您谈论的是共享库,而不是归档库(在归档库中,您会得到一个多定义的符号错误)

是的,这就是它应该如何工作的,并且一直在UNIX上工作。缓存与此无关

如果您在ELF平台上,您可能可以通过使用
-Wl,-Bsymbolic
,让它在更多的窗口中工作,但您将与默认的系统行为作斗争,应该会遇到困难和许多意外的问题。如果
fun
不需要从
libX
公开,那么隐藏的就是你的朋友

由于您正在为
lib1
生成代码
libN
,使用例如
libX\u-fun
而不是
fun
可能更容易避免名称冲突。这也将更加便携,因为它将在任何地方工作

更新:

根据接口规范,函数名必须非常有趣

根据世卫组织的接口规范


显然,您可以同时控制主程序和库。因此,您可以,而且可能应该更改接口规范以避免此问题。

根据接口规范,函数名必须是
fun
-Wl,-Bsymbolic
没有帮助。但是,我在
libX
完成其工作后立即使用
dlclose
解决了这个问题。但是如果我想使用
lib1
,这将不起作用
libN
并行。有一个预编译的MATLAB代码调用
fun
,在运行时重新编译它的成本太高。根据接口规范,函数名必须是
fun
-Wl,-Bsymbolic
没有帮助。但是,我在
libX
完成其工作后立即使用
dlclose
解决了这个问题。但是如果我想使用
lib1
,这将不起作用<代码>libN并行。有一个预编译的MATLAB代码调用
fun
,在运行时重新编译它的成本太高。