c - 参数在传递到函数时被破坏?

标签 c pointers linker solaris calling-convention

我看到了一些让我困惑的东西。也许大家可以提供建议。

当传递给不同的函数时,看似有效的参数会被损坏。

这是我的设置:

  • LibA.a
  • LibB.a
  • 示例应用
  • MyApp.c

错误的函数调用是从 LibA 进入 LibB。

LibA、LibB 和 SampleApp 均已由 Solaris x86/64 上旧版本的 Sun Studio 进行了预编译(幸运的是在 Debug模式下)。 SampleApp 同时使用 LibA 和 LibB,并且在我的系统上运行得很好。

MyApp 以与 SampleApp 类似的方式使用 LibA 和 LibB。然而,MyApp 由于指针损坏而崩溃。

// File scoped string declared
static const char myString[] = "SomeText"

// The function call looks like  
libAfunc(myString, myIntVar)

// The called function prototype is like 
int libAfunc(const char* strArg, int intArg)

当单步执行代码时,我看到调用者 (myString) 中的指针有效并作为参数传递。在被调用方中,传入的参数指针 (strArg) 中的地址根本就是错误的。事实上,所有参数传入后实际上都是错误的。

注意:调用者在预编译的LibA中,被调用者在预编译的LibB中。我什至从未接触过该代码,因为它都是预编译的。此外,代码本身可能是正确的,因为 SampleApp 使用这些函数并且运行良好。 (尽管调用顺序可能略有不同......)

我认为我的错误是在链接阶段,但我不确定它可能是什么。

有什么想法吗?

谢谢

最佳答案

你能用你的编译器编译SimpleApp吗?还有效吗?

我不熟悉您的特定平台,但有一段时间,某些编译器的指针可能具有不同的大小,具体取决于所使用的编译器选项。

如果您的编译器生成(例如)64 位指针,而库使用 32 位指针,那么您的症状就有意义。

关于c - 参数在传递到函数时被破坏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7028702/

相关文章:

C: 为什么函数中指针地址设置为空,而main中却有一个非空地址?

c++ - 从 .cpp 文件调用 .mm 函数的链接器错误

iphone - 尝试与 iPhone 应用程序集成时,Google plus SDK 会发出链接器错误

python - 如何释放 SWIG 返回的 malloc'ed char*

c - 将 double 组转换为字符串数组时出现错误值

c++ - 如何实现pop()函数

ios - Xcode 5 在静态库中找不到 armv7s 架构,即使文件和 lipo 说它在那里

c - 在C中将元素添加到数组中,同时保持升序

c++ - 将 std::map 移植到 C?

pointers - fmt.Printf() 格式说明符以默认格式打印指向结构的指针?