首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

ubuntu gcc编译时对’xxxx’未定义的引用问题

http://www.cnblogs.com/oloroso/p/4688426.html gcc编译时对’xxxx’未定义的引用问题 原因 解决办法 gcc 依赖顺序问题 在使用gcc编译的时候有时候会碰到这样的问题...dso.o:在函数‘dso_load(char const*, char const*)’中: dso.cpp:(.text+0x3c):对‘dlopen’未定义的引用 dso.cpp:(.text+0x4c...):对‘dlsym’未定义的引用 dso.cpp:(.text+0xb5):对‘dlerror’未定义的引用 dso.cpp:(.text+0x13e):对‘dlclose’未定义的引用 原因 出现这种情况的原因...但是在链接为可执行文件的时候就必须要具体的实现了。如果错误是未声明的引用,那就是找不到函数的原型,解决办法这里就不细致说了,通常是相关的头文件未包含。...但是看上面编译的时候是有添加-ldl选项的,那么为什么不行呢? gcc 依赖顺序问题 这个主要的原因是gcc编译的时候,各个文件依赖顺序的问题。

8.2K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Android Framework分析(3)——Zygote进程源码分析

    //JNI_CreateJavaVM_函数指针指向虚拟机库中的JNI_CreateJavaVM函数 if (!...//创建java虚拟机 if (JNI_CreateJavaVM(pJavaVM, pEnv, &initArgs) < 0) { ALOGE("JNI_CreateJavaVM...failed\n"); return -1; } return 0; } JNI_CreateJavaVM()是JniInvocation.cpp中的函数,会调用到①...中所说的JNI_CreateJavaVM_()函数指针,最后调用到相应虚拟机动态库中的JNI_CreateJavaVM()函数,创建对应的虚拟机。...如果jni函数比较少,这么做确实可行,但是我们可以看到gRegJNI数组是很庞大的,需要映射的函数也很多,如果全部交给虚拟机映射,会大大降低虚拟机的执行性能,所以我们提前注册JNI函数,虚拟机就可以直接找到对应的函数进行调用

    1.1K20

    Java程序main方法执行流程

    ,并找到创建虚拟机的入口函数JNI_CreateJavaVM存储到结构体InvocationFunctions中。...之后再JavaMain函数中,会根据JNI_CreateJavaVM虚拟机创建函数来初始化虚拟机,此时已经是在一个新的线程中运行了。...JNI_CreateJavaVM //这里会区分不同平台和CPU位数,但大体上就是使用dlopen和dlsym这个两个系统调用来实现 if (!...; //调用JNI_CreateJavaVM函数创建虚拟机,该函数内部会转调JNI_CreateJavaVM_inner函数 r = ifn->CreateJavaVM(pvm...VMThread用于执行VMOptions 初始化主要JDK类,如String类、System类,Class类、线程/线程组类、Module类,还有其他反射、异常相关的类 初始化jni方法的快速调用 标记虚拟机的基本初始化完成

    1.2K30

    Jvm(jdk8)源码分析1-java命令启动流程详解

    除了本身框架的使用之外,凡是使用java语言开发的系统都避免不了对jvm的调优(对于系统性能要求不高可能不需要,但是对于互联网公司来说性能好像是对系统的基本要求)。...(3)LoadJavaVM:动态加载jvm.so这个共享库,并把jvm.so中的相关函数导出并且初始化,例如JNI_CreateJavaVM函数。...JNI_CreateJavaVM函数真正的开始启动一个jvm的,这个函数会做很多的初始化工作,基本上一个完整的jvm信息在这个函数里面都能够看到,后面单独详细讲解这个函数。...)JavaMain->InitializeJVM(初始化jvm,这个函数调用jvm.so里面导出的CreateJavaVM函数创建jvm了,JNI_CreateJavaVM这个函数很复杂)->LoadMainClass...一个就是初始化和启动真正的jvm,由动态链接库jvm.so中的JNI_CreateJavaVM实现,另外一个就是最后查找入口类以及查找main入口函数的具体实现。

    1.4K30

    HotSpot的启动过程(配视频进行源码分析)

    ,最终会调用到libjvm.so中对应的以JNI_Xxx开头的方法,其中JNI_CreateJavaVM()方法会在InitializeJVM()函数中调用,用来初始化2个JNI调用时非常重要的2个参数...InvocationFunctions结构体下 // 的CreateJavaVM()函数指针来实现,该指针在LoadJavaVM()函数中指向libjvm.so动态链接库中JNI_CreateJavaVM...调用InitializeJVM()函数初始化JVM,主要就是初始化2个非常重要的变量JavaVM与JNIEnv,在这里不过多探讨这个问题,后面在讲解JNI调用时会详细介绍初始化过程。...调用本地函数jni_DetachCurrentThread()断开与主线程的连接。...当成功与主线程断开连接后,当前线程一直等待程序中所有的非守护线程全部执行结束,然后调用本地函数jni_DestroyJavaVM()对JVM执行销毁。

    1K20

    深入理解Java之jvm启动流程

    JVM.dll文件的装载: 1、LoadLibrary方法装载JVM.dll动态连接库; 2、把JVM.dll文件中定义的函数JNI_CreateJavaVM和JNI_GetDefaultJavaVMInitArgs...AddOption核心就是对-Xss参数进行特殊处理,并设置threadStackSize,因为参数格式比较特殊,其它是key/value键值对,它是-Xss512的格式。...的CreateJavaVM方法,即调用JVM.dll函数JNI_CreateJavaVM,新建一个JVM实例,该过程比较复杂,会在后续文章进行分析。...最终调用JVM.dll函数jni_GetStaticMethodID实现。 ? 其中get_method_id方法根据类文件对应的instanceKlass对象查找指定方法。...1、重新创建参数数组; 2、其中mainID是main方法的入口地址,CallStaticVoidMethod方法最终调用JVM.dll中的jni_CallStaticVoidMethodV函数。

    6.8K51

    Java离Linux内核有多远?

    ; return JNI_TRUE; } dlopen 和 dlsym 涉及动态链接,简单理解就是 libjvm.so 包含 JNI_CreateJavaVM、JNI_GetDefaultJavaVMInitArgs...插一句,我是真的不喜欢按照函数调用的方式讲述问题,a 调用 b,b 又调用 c,简直是在浪费篇幅,但是有些地方跨度太大又怕引起误会(尤其对初学者而言)。...InitializeJVM 会调用 ifn->CreateJavaVM,也就是libjvm.so 中的 JNI_CreateJavaVM。...系统调用的结果由 eax 返回,第 8 步判断 clone 系统调用的结果,对当前进程而言,clone 系统调用如果成功返回的是新线程在它的 pid namespace 中的 id,大于 0,所以它执行...对新线程而言,clone 系统调用的返回值等于 0,所以它执行L(thread_start) 处的代码。

    1.6K10
    领券