【发布时间】:2021-08-08 19:27:11
【问题描述】:
我在 C++ 中创建了一个 gRPC 客户端服务器应用程序。消息在 protobuf 文件中定义,生成的代码与我自己的 c++ 命令和 gRPC 库捆绑在一起,以创建静态 grpc_lib.a。 反过来,这个 grpc_lib.a 链接到相关的客户端和服务器代码以创建客户端和服务器应用程序。这一切正常,代码运行。
我的大部分测试代码都是基于 TCL 的。因此,我创建了另一个静态库 (tcl_grpc.a),其中包含 grpc_lib.a 和详细说明 TCL 命令的 c 源代码。 这都是标准的东西。 但是,问题是我无法将 tcl_grpc.a 库加载到我的 TCL shell 中。 我经常遇到“分段错误”
有没有其他人在将库加载到 TCL 时遇到过类似的问题?
提前致谢。
【问题讨论】:
-
从您提供的信息中,我们真正能说的只有“有些东西不工作”。你有堆栈跟踪吗?
-
这是一个公平的回应,谢谢你。奇怪的是,没有发出堆栈跟踪。信息简陋得令人沮丧。这发生在加载库期间。我的问题是是否有人在将 c++ 库加载到 TCL 时遇到过类似的情况?任何想法将不胜感激
-
当你将一个库加载到 Tcl 中(无论是动态的还是静态的),它的 init 函数被调用以允许库注册它创建的命令(和其他东西)。通常,如果库是
libfoo.so或foo.dll,则函数称为Foo_Init。对于静态链接的东西,Tcl_StaticLibrary会进行 init 函数注册(而你load的文件名是空的)。但由于 init 函数是 C 代码,它们可能会在很多方面出错;如果没有进一步的信息,很难说问题出在哪里。