精华内容
参与话题
问答
  • 在实际编译代码的过程中,我们经常会遇到"undefined reference to"的问题,简单的可以轻易地解决,但有些却隐藏得很深,需要花费大量的时间去排查。工作中遇到了各色各样类似的问题,按照以下几

          前些天,发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程:

          人工智能入门与进阶(链接)

     

     

     

     

    在实际编译代码的过程中,我们经常会遇到"undefined reference to"的问题,简单的可以轻易地解决,但有些却隐藏得很深,需要花费大量的时间去排查。工作中遇到了各色各样类似的问题,按照以下几种可能出现的状况去排查,可有利于理清头绪,从而迅速解决问题。

    链接时缺失了相关目标文件

    首先编写如下的测试代码:

    
    // test.h
    
    #ifndef __TEST_H__
    #define __TEST_H__
    
    void test();
    
    #endif
    
    // test.c
    
    #include <string.h>
    #include <stdio.h>
    
    
    
    void test()
    {
        printf("just test it\n");
    }
    
    // main.c
    
    #include "test.h"
    
    int main(int argc, char **argv)
    {
        test();
    
        return 0;
    }

    通过以下的命令,我们将会得到两个.o文件。

    $ gcc -c test.c  
    $ gcc –c main.c 

    随后,我们将main.o这个文件,编译成可执行文件。

    $ gcc -o main main.o
    Undefined symbols for architecture x86_64:
      "_test", referenced from:
          _main in main.o
    ld: symbol(s) not found for architecture x86_64
    clang: error: linker command failed with exit code 1 (use -v to see invocation)

    编译时报错了,这是最典型的undefined reference错误,因为在链接时发现找不到某个函数的实现文件。如果按下面这种方式链接就正确了。

    $ gcc -o main main.o test.o

    当然,也可以按照如下的命令编译,这样就可以一步到位。

    $ gcc -o main main.c test.c

    链接时缺少相关的库文件

    我们把第一个示例中的test.c编译成静态库。

    $ gcc -c test.c  
    $ ar -rc test.a test.o 

    接着编译可执行文件,使用如下命令:

    $ gcc -o main main.c 
    Undefined symbols for architecture x86_64:
      "_test", referenced from:
          _main in main-6ac26d.o
    ld: symbol(s) not found for architecture x86_64
    clang: error: linker command failed with exit code 1 (use -v to see invocation)

    其根本原因也是找不到test()函数的实现文件,由于test()函数的实现在test.a这个静态库中,故在链接的时候需要在其后加入test.a这个库,链接命令修改为如下形式即可。

    $ gcc -o main main.c test.a

     

    链接的库文件中又使用了另一个库文件  (这个例子非常非常好, 我就是犯了这种错误!!!)

    先更改一下第一个示例中使用到的代码,在test()中调用其它的函数,更改的代码如下所示。

    
    // func.h
    
    #ifndef __FUNC_H__
    #define __FUNC_H__
    
    void func();
    
    #endif
    
    // func.c
    
    #include <stdio.h>
    
    void func()
    {
        printf("call it\n");
    }
    
    // test.h
    
    #ifndef __TEST_H__
    #define __TEST_H__
    
    void test();
    
    #endif
    
    // test.c
    
    #include <string.h>
    #include <stdio.h>
    
    #include "func.h"
    
    
    
    void test()
    {
        printf("just test it\n");
    
        func();
    }
    
    // main.c
    
    #include "test.h"
    
    int main(int argc, char **argv)
    {
        test();
    
        return 0;
    }

    我们先对fun.ctest.c进行编译,生成.o文件。

    $ gcc -c func.c  
    $ gcc -c test.c

    然后,将test.cfunc.c各自打包成为静态库文件。

    $ ar –rc func.a func.o  
    $ ar –rc test.a test.o 

    这时将main.c编译为可执行程序,由于main.c中包含了对test()的调用,因此,应该在链接时将test.a作为我们的库文件,链接命令如下。

    $ gcc -o main main.c test.a
    Undefined symbols for architecture x86_64:
      "_func", referenced from:
          _test in test.a(test.o)
    ld: symbol(s) not found for architecture x86_64
    clang: error: linker command failed with exit code 1 (use -v to see invocation)

    就是说,链接的时候发现test.a调用了func()函数,找不到对应的实现,我们还需要将test.a所引用到的库文件也加进来才能成功链接,因此命令如下。

    $ gcc -o main main.c test.a func.a

    同样,如果我们的库或者程序中引用了第三方库(如pthread.a)则在链接的时候需要给出第三方库的路径和库文件,否则就会得到undefined reference的错误。

    多个库文件链接顺序问题

    这种问题非常隐蔽,不仔细研究,可能会感到非常地莫名其妙。以第三个示例为测试代码,把链接库的顺序换一下,如下所示:

    $ gcc -o main main.c func.a test.a
    test.a(test.o): In function `test':  
    test.c:(.text+0x13): undefined reference to `func'  
    collect2: ld returned 1 exit status

    因此,在链接命令中给出所依赖的库时,需要注意库之间的依赖顺序,依赖其他库的库一定要放到被依赖库的前面,这样才能真正避免undefined reference的错误,完成编译链接。

    备注:在MAC上可以正常编译通过。

    定义与实现不一致

    编写测试代码如下:

    
    // test.h
    
    #ifndef __TEST_H__
    #define __TEST_H__
    
    void test(unsigned int c);
    
    #endif
    
    // test.c
    
    #include <string.h>
    #include <stdio.h>
    
    
    
    void test(int c)
    {
        printf("just test it\n");
    }
    
    // main.c
    
    #include "test.h"
    
    int main(int argc, char **argv)
    {
        test(5);
    
        return 0;
    }

    先将test.c编译成库文件。

    $ gcc -c test.c 
    $ ar -rc test.a test.o

    main.c编译成可执行文件。

    $ gcc -o main main.c test.a
    ld: warning: ignoring file test.a, file was built for archive which is not the architecture being linked (x86_64): test.a
    Undefined symbols for architecture x86_64:
      "_test", referenced from:
          _main in main-f27cf1.o
    ld: symbol(s) not found for architecture x86_64
    clang: error: linker command failed with exit code 1 (use -v to see invocation)

    链接出错了,原因很简单,test()这个函数的声明和定义不一致导致,将两者更改成一样即可通过编译。

    c++代码中链接c语言的库

    代码同示例一的代码一样,只是把main.c更改成了main.cpp。编译test.c,并打包为静态库。

    $ gcc -c test.c  
    $ ar -rc test.a test.o

    编译可执行文件,用如下命令:

    $ g++ -o main main.cpp test.a 
    Undefined symbols for architecture x86_64:
      "test()", referenced from:
          _main in main-7d7fde.o
    ld: symbol(s) not found for architecture x86_64
    clang: error: linker command failed with exit code 1 (use -v to see invocation)

    原因就是main.cppc++代码,调用了c语言库的函数,因此链接的时候找不到,解决方法是在相关文件添加一个extern "C"的声明即可,例如修改test.h文件。

    
    // test.h
    
    #ifndef __TEST_H__
    #define __TEST_H__
    
    #ifdef __cplusplus
    extern "C" {
    #endif
    
    void test();
    
    #ifdef __cplusplus
    }
    #endif
    
    #endif

     

     

     

    展开全文
  • Kotlin Unresolved reference: 解决办法

    万次阅读 热门讨论 2018-01-05 16:42:20
    kotlin Unresolved reference:错误的解决办法

    Android官方已经不建议使用Kotlin Android Extensions 了,建议使用ViewBinding代替Kotlin synthetics,详情请看:

    ViewBinding代替Kotlin synthetics


    已下是之前使用 Kotlin synthetics 遇到的问题

    今天在使用Kotlin写demo的时候发现,当我在主工程中的xml布局中通过include标签引入其他Moudle中的布局后,编译就会报Unresolved reference xxx这个错误.但是include本模块中的布局就没问题。应该是目前kotlin-android-extensions暂时还不支持跨模块的问题吧。(截止到2018-01-05)

    解决办法:
    1.将通用布局放到本模块中
    2.直接在xml中写布局,不要include其他模块中的布局

    暂时只想到这两个笨方法,如果你有更好的解决方法,还请指教。不胜感激,谢谢!


    展开全文
  • mysql reference

    千次阅读 2017-08-10 15:26:06
    mysql reference

    mysql standard

    MySQL Standards Compliance
    This section describes how MySQL relates to the ANSI/ISO SQL standards. MySQL Server has many extensions to the SQL standard, and here you can find out what they are and how to use them. You can also find information about functionality missing from MySQL Server, and how to work around some of the difference
    这部分主要是1.描述了mysql跟标准之间的联系,2.大量的标准扩展的都有哪些和如何使用,3.还可以发现一些mysql服务所缺少的一些使用性的一些信息如何工作
    One of our main goals with the product is to continue to work toward compliance with the SQL standard, but without sacrificing speed or reliability.
    我们的主要目标是所有的生产开发都是继续朝着sql标准化工作的,但是不能以牺牲速度和稳定为代价
    We are not afraid to add extensions to SQL or support for non-SQL features if this greatly increases the usability of MySQL Server for a large segment of our user base.
    我们并不害怕增加对sql支持的一些扩展和一些非sql特点的特征的支持只要他能勾对大多数用户的使用能够起到一定使用效率的如HANDLER
    We continue to support transactional and nontransactional databases to satisfy both mission-critical 24/7 usage and heavy Web or logging usage.
    ==我们继续支持了事物和非事务型数据库对于对于全天候(24/7)关键任务的支持和日志服务或者是大型网页的支持==
    MySQL Server was originally designed to work with medium-sized databases (10-100 million rows, or about 100MB per table) on small computer systems. Today MySQL Server handles terabyte-sized databases, but the code can also be compiled in a reduced version suitable for hand-held and embedded devices. The compact design of the MySQL server makes development in both directions possible without any conflicts in the source tree.
    mysql最初的设计是为了中型的数据库服务的,1000行数据量或者100M的数据量每张表在一个小型的计算机操作系统中的,现在mysql能够操控G级别的数据库,而且这些代码可以编译到之前的手持设备和嵌入式设备的版本中,因为有了扩展这种设计使得mysql的开发可以朝着两个反响发展在源码的开发树中,一个只关心内核的发展,另一个考虑其他的功能
    We are not targeting real-time support, although MySQL replication capabilities offer significant functionality.
    即使是mysql中从复制提供了很多有效的函数,我们的目标也不是实时读取的
    Selecting SQL Modes
    The MySQL server can operate in different SQL modes, and can apply these modes differently for different clients, depending on the value of the sql_mode system variable. DBAs can set the global SQL mode to match site server operating requirements, and each application can set its session SQL mode to its own requirements.
    mysql服务器可以针对不同的模式操作实行不同的操作,基于不同的sql模式系统变量的值来实现针对不同的客户端的不同模式,DBA数据库管理远就能够设置全局的sql模式来匹配不同的服务站点,但是每个应用又可以通过设置上下文来设置sql模式来实现各自的需要
    Modes affect the SQL syntax MySQL supports and the data validation checks it performs. This makes it easier to use MySQL in different environments and to use MySQL together with other database servers.
    模式会影响到mysql支持的sql语法校验和数据类型能够校验的平台相关性,这样使得mysql在不同的环境变量中更容易使用更容易配合其他数据库服务器的使用

    通常来说MySQL服务器能够工作在不同的SQL模式下,并能针对不同的客户端以不同的方式应用这些模式。这样,应用程序就能对服务器操作进行量身定制以满足自己的需求。这类模式定义了MySQL应支持的SQL语法,以及应该在数据上执行何种确认检查。这样,就能在众多不同的环境下、与其他数据库服务器一起更容易地使用MySQL。可以使用“–sql-mode=”modes””选项,通过启动mysqld来设置默认的SQL模式。而从MySQL 4.1开始,也能在启动之后,使用SET [SESSION|GLOBAL] sql_mode=’modes’语句,通过设置sql_mode变量更改其模式。
    通常来说MySQL服务器能够工作在不同的SQL模式下,并能针对不同的客户端以不同的方式应用这些模式。这样,应用程序就能对服务器操作进行量身定制以满足自己的需求。这类模式定义了MySQL应支持的SQL语法,以及应该在数据上执行何种确认检查。这样,就能在众多不同的环境下、与其他数据库服务器一起更容易地使用MySQL。可以使用“–sql-mode=”modes””选项,通过启动mysqld来设置默认的SQL模式。而从MySQL 4.1开始,也能在启动之后,使用SET [SESSION|GLOBAL] sql_mode=’modes’语句,通过设置sql_mode变量更改其模式。
    通常在linux下安装完mysql后,其默认的sql-mode值是空,在这种情形下mysql执行的是一种不严格的检查,例如日期字段可以插入’0000-00-00 00:00:00’这样的值,还有如果要插入的字段长度超过列定义的长度,那么mysql不会终止操作,而是会自动截断后面的字符继续插入操作,如下例:

    源码安装的时候
    MySQL Configuration and Third-Party Tools
    Third-party tools that need to determine the MySQL version from the MySQL source can read the VERSION file in the top-level source directory. The file lists the pieces of the version separately. For example, if the version is MySQL 5.7.4-m14, the file looks like this: 是否支持第三方工具,需要开启标注本本号
    MYSQL_VERSION_MAJOR=5
    MYSQL_VERSION_MINOR=7
    MYSQL_VERSION_PATCH=4
    MYSQL_VERSION_EXTRA=-m14
    比如客户端等相关的东西

    初始化数据库,
    After installing MySQL, you must initialize the data directory, including the tables in the mysql system database. For some MySQL installation methods, data directory initialization may be done automatically,在安装数据库完成的时候需要重新初始化数据库,数据库的文件路径,一些基本的表

    展开全文
  • 描述:模块部分,写一个外部模块导入的时候居然提示unresolved reference,如下,程序可以正常运行,但是就是提示包部分红色,看着特别不美观,下面是解决办法 PyCharm版本: 解决: 1.在项目上 单击右键 -&...

    描述:模块部分,写一个外部模块导入的时候居然提示unresolved reference,如下,程序可以正常运行,但是就是提示包部分红色,看着特别不美观,下面是解决办法

    PyCharm版本:

    解决:

        1.在项目上 单击右键 -> Mark Directory as -> Sources Root

        2.点击之后红色警告消失

        3.进入设置:file -> settings

        4.按照下图展开 Build,Execution,Deployment -> Console -> Python Console -> Add source roots to PYTHONPATH,勾选上3,选择确定,问题完美解决

    5.如果问题还没解决,欢迎大家留言探讨

    网友留言提示:如果创建的是directory而不是package上述操作不会生效!

    【已经多次掉入这个坑了,大家网上查,很多说设置成source root就可以了,然后添加路径,有的可以解决,有的不能解决,这是为什么了,经过多次尝试发现,我们忽略了一个问题,就是有的小伙伴新建文件夹而不是包(图标上有小圆圈),如果这种情况采取以上操作无效的,需要把文件夹转成包】

    展开全文
  • Dubbo之@ReferenceReferenceBean

    千次阅读 2019-07-17 12:41:49
    1、构建一个ReferenceBean,然后使用Spring的@Autowired引用服务 @Bean public ReferenceBean<PLRepaymentPlanService> repaymentPlanServiceReferenceBean(){ ReferenceBean<PLRepayment...
  • "undefined reference to" 问题解决方法

    万次阅读 多人点赞 2019-05-30 21:01:00
    (.text+0x13): undefined reference to `func’ 关于undefined reference 这样的问题,大家其实经常会遇到,在此,我以详细地示例给出常见错误的各种原因以及解决方法,希望对初学者有所帮助。 1. 链接时缺失了相关...
  • reference(引用)是一个object的alias别名,本身不是一个object,故严格说没有const reference。当你称呼const reference 的时候前提是你要明白那是对reference to const 的简称。
  • pycharm中出现unresolved reference的解决办法

    万次阅读 多人点赞 2019-03-04 10:45:22
    unresolved reference",我就很郁闷,明明代码可以正确运行的啊,怎么会出现这种错误。 红色错误提示看着真心不爽,索性去网上百度了一圈,居然没找到解决办法,后来在stackoverflow上看到有人遇到同样...
  • Java Reference

    千次阅读 2015-06-11 20:26:29
    Java Reference简要笔记。。。
  • c# WebReference与ServiceReference 小结

    千次阅读 2018-08-22 16:33:57
    WebReference是由wsdl.exe生成客户端代理的。生成webservice代理类的方法,即从System.Web.Services.Protocols.SoapHttpClientProtocol派生而来,代理类代码可以指定要访问的Url属性。 ServiceReference是由svcutil...
  • 对@Reference 、@Resource和@Autowired的简单理解

    万次阅读 多人点赞 2018-11-20 00:26:33
    主要谈一下对这三个注解的简单理解: @Reference 、@Resource和@Autowired
  • Application reference

    2014-09-13 10:40:16
    Application reference is more like a shell shortcut or .lnk file, which contains a reference to a ClickOnce installed application. This is specific to ClickOnce.
  • 引用 Web Reference 设置好URL地址后,引用是在项目的Web References文件夹里,在CS文件里使用如下: WebReference.WSBasicLib cs = new WebService1.WebReference.WSBasicLib(); Response.Write(cs.GetDate_Last...
  • dubbo @Reference 注解注入原理

    千次阅读 2019-09-19 19:29:26
    被@Reference 注解的 bean,是在什么时机注入的? 被@Reference 注解的 bean,通常是一个接口,怎么可以被实例化呢? 答案是: @Reference 的注入时机和 @Autowired 注解是类似的,但不完全一样。负责修饰 bean ...
  • Cyclic Reference sReferencecounting is a convenient resource management mechanism, it has one fundamental drawback though: cyclic reference
  • Universal Reference

    千次阅读 2015-04-02 15:37:18
    表示c++11 添加了std::move后一直搞不清楚左值,右值神马的....type&& -> rvalue reference 错误 千万不要天真的以为有了&&后,就是右值引用了! type&& 可能代表两种情况 1> rvalue reference 2> univers
  • Web Reference和Service Reference的区别

    千次阅读 2017-07-26 10:09:02
    今天因为项目需要使用服务引用,就按之前的经验添加上了,步骤...按照上面的步骤就可以将引用添加到Web References文件夹下,这也是以往经验,但是具体使用时发现添加的是Web Reference并不能满足项目的需要,这里需
  • Reference Obligation

    2012-12-20 16:59:49
    Definition of 'Reference Obligation' The specific underlying debt upon which a credit derivative is based. A reference obligation is issued by the reference entity. It does not represent all the form
  • java Reference

    千次阅读 2013-01-22 15:38:28
    java reference Reference Java世界泰山北斗级大作《Thinking In Java》切入Java就提出“Everything is Object”。在Java这个充满Object的世界中,reference是一切谜题的根源,所有的故事都是从这里开始的。...
  • CTFramesetter Reference

    千次阅读 2012-11-26 10:01:51
    转载自:http://developer.apple.com/library/mac/#documentation/Carbon/Reference/CTFramesetterRef/Reference/reference.html#//apple_ref/c/func/CTFramesetterSuggestFrameSizeWithConstraints ...
  • python reference理解

    2019-11-03 13:57:59
    在python中当我们创建一个新变量并赋值时,实际上我们是创建了一个object和一个reference。例如当我们执行如下语句的时候:a=1,一个值为1的objec将t在内存中被创建,并且一个reference 'a’被指向这个object。假如...
  • 解决 undefined reference to 问题

    万次阅读 2018-06-14 15:27:40
    首先这篇文章总结得不错 ... 然后依然会碰到问题,这时候就要看具体的函数签名了 Name Mangling in C++ 参考 http://blog.51cto.com/hipercomer/855223 nm工具的 –demangle 选项 可以让函数名可读 ...name dema...
  • undefined reference to 'floor'/undefined reference to `& undefined reference to 'pow'/undefined reference to `&   今天用linux编译一个程序的时候遇到了一个小问题,如标题所示,先说解决方法 ...
  • reference path

    2015-01-30 15:09:52
    .NET中 reference path存在的意义 当然没用,要在HTML中用script标签引用才有效果,/// 收获园豆:10 Gray Zhang | 专家六级 |园豆:17610 | 2010-12-20 17:02 页面上也引用了,刚才...
  • Jetbrains Rider 添加 Reference

    千次阅读 2019-08-27 16:46:41
    非常简单的操作,记录一下。 偶然群里提到Unity 下添加System....方法很简单 Solution 视图下,右键Reference -》 Add Reference 打开的界面 可以直接搜索,或者通过Add From 通过文件近行指定目标近行添加 ...
  • undefined reference to

    千次阅读 2019-03-15 19:43:39
    多个库文件链接顺序问题 这种问题非常隐蔽,不仔细研究,可能会感到非常地莫名其妙。以第三个示例为测试代码,把链接库的顺序换一下,如下所示: ... test.c:(.text+0x13): undefined reference...
  • 使用mediaSession时报错 Fatal Exception: java.lang.NullPointerException: Attempt to ... virtual method ‘java.lang.Object java.lang.ref.Reference.get()’ on a null object reference at andro...
  • 以前在同一模块中Spring依赖注入,可以通过@Service和@Autowired Dubbo是远程服务调用,...dubbo:reference、dubbo:service <dubbo:service interface="fei.CustomerServices" ref="customerServices"/> ...
  • PowerDesigner Reference 外键

    千次阅读 2017-11-28 17:02:28
    我们可能在Powerdesigner中,直接新建物理...1、如果B表中没有外键列,则直接使用工具reference,B表中自动生成外键列,如下图: 2、如果B表中已经有列和A中主键列相同,则直接使用工具reference,使用B表已

空空如也

1 2 3 4 5 ... 20
收藏数 224,347
精华内容 89,738
关键字:

reference