我有一个共享对象,我使用Windows上的Real View开发人员套件工具链接命令在Windows上创建
armlink -o mylib.so<“我在这里给出的* .o文件”>
然后我使用gcc工具将应用程序与linux上的mylib.so共享库链接。
我在这个mylib.so中的函数内部有printf语句,但是当我运行最后一个可执行文件时,我没有在控制台上获得任何printf输出。(无论在哪里调用printfs,stdio.h都被包含在内)
共享库是否存在任何已知问题导致printf或任何系统函数/系统调用/运行时库函数无法正常工作?
或者这与我在基于Windows的编译器工具链上创建共享库的特殊设置有关,但是将此共享库与linux-gcc编译器工具上的应用程序相链接?
谢谢。
-AD
答案 0 :(得分:0)
由于你的目标是arm,我认为这是C,在windows上编译一些文件然后在linux上链接应该不是问题。你有没有验证过这个?我建议在windows上制作一个hello.so,从hello.c链接:
#include <stdio.h>
void hello(void) {printf("Hello\n");}
然后从linux上的main.c链接main:
void hello(void);
int main(int argc, char *argv[]){ hello(); return 0; }
作为最小编译器链测试。
如果从最终可执行文件中定义的代码中调用printf(即不是共享库中的代码),您是否从中获得了任何输出?
确实
strings --print-file-name -a mylib.so final_executable | grep "string from printf in shared library"
返回两个事件?
中是否有对printf的引用
readelf -a mylib.so
readelf -a final_executable