【问题标题】:TCL Segmentation fault when loading a static library加载静态库时出现 TCL 分段错误
【发布时间】: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.sofoo.dll,则函数称为Foo_Init。对于静态链接的东西,Tcl_StaticLibrary 会进行 init 函数注册(而你 load 的文件名是空的)。但由于 init 函数是 C 代码,它们可能会在很多方面出错;如果没有进一步的信息,很难说问题出在哪里。

标签: c++ c tcl fault


【解决方案1】:

问题是 c 和 c++ 库的不正确混合。 这不是TCL的错 创建的 TCL 库只是 .c 文件,它们从不同的库中调用 c++ 类。 解决方案是将 tcl 库分解为 .c 和 .cpp 文件,分别使用 g 和 g++ 分别编译。 cpp 文件将引用 cpp 库中的类。 感谢大家的反馈

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 2020-01-14
    • 1970-01-01
    • 2014-08-31
    • 1970-01-01
    相关资源
    最近更新 更多