C 在生成时解析符号冲突

C 在生成时解析符号冲突,c,go,gcc,cgo,C,Go,Gcc,Cgo,我在C程序中遇到了一些符号冲突,以前的一些搜索导致了objcopy问题是我的工作流是golang cgo工作流,所以我不处理.o和.a(我知道我的库的目标可能是供其他人使用,所以我不能自定义golang工作流) 我需要的更多信息: 我的go库中有一堆函数在做各种事情,这些代码是自动生成的,无法预测,它们有时会与构建管道中的其他函数发生冲突(同名),因此我希望我的go库中的所有C函数都被重命名,这可以在构建时使用standart cgo过程发生(基本上我先用gcc构建每个文件,然后将它们链接起来

我在C程序中遇到了一些符号冲突,以前的一些搜索导致了
objcopy
问题是我的工作流是golang cgo工作流,所以我不处理
.o
.a
(我知道我的库的目标可能是供其他人使用,所以我不能自定义golang工作流)


我需要的更多信息: 我的go库中有一堆函数在做各种事情,这些代码是自动生成的,无法预测,它们有时会与构建管道中的其他函数发生冲突(同名),因此我希望我的go库中的所有C函数都被重命名,这可以在构建时使用standart cgo过程发生(基本上我先用gcc构建每个文件,然后将它们链接起来)或者在代码自动生成之后(我想我可以运行一个预处理器,重命名所有函数,在源代码中有调用,但我找不到)


我已经尝试过的:
#pragma外部前缀

看起来很有希望,但无论我做什么,我都无法让它发挥作用:

//test.c
#包括
#pragma外部前缀“TestPrefix”
int测试(){
printf(“你好,世界!\n”);
返回0;
}
#pragma外部前缀“”
int main(){
返回测试();
}
外壳输出:

$ gcc test.c -o test && ./test && nm -an test | grep test
Hello, World!
0000000000000000 a test.c
0000000000001149 T test

与我预期的不同,
test
符号的前缀与我预期的不同(据我所知,符号应该是
TestPrefixtest
)。

您链接到的GCC文档中说“当前仅在Tru64 UNIX上”。如果您使用
-Wunknown pragma
-Wall
编译,如果不理解pragma,您将收到警告。直接调用plus的编译不会对您有用吗?或者,Go的标准库中有完整格式的Go解析器,因此您可以对自动生成的代码进行后期处理,以向所有e符号导出到C。另外,当您
go build-buildmode=C-archive
您的
cgo
代码时会发生什么?结果库是否可以使用
objdump
?>进行操作?您链接到的GCC文档中说“当前仅在Tru64 UNIX上”。如果使用-Wunknown pragma或-Wall编译,如果不理解pragma,则应收到警告。是的,thx,这确实解释了为什么这不起作用。