与使用名称空间的外部库链接时,如何解决 C 中未定义的引用?

     2023-02-17     166

关键词:

【中文标题】与使用名称空间的外部库链接时,如何解决 C 中未定义的引用?【英文标题】:How to solve undefined references in C when linking with an external library that uses name space? 【发布时间】:2014-08-06 06:17:36 【问题描述】:

我正在将我的程序链接到一个外部静态库。

这是我看到的众多错误之一:

undefined reference to `tcp_outratectl_tmofactor'

这在外部库c文件中定义为:

int tcp_outratectl_tmofactor = 1;

这个在我的程序中使用如图:

/* This is just a snippet */
extern int tcp_outratectl_timerticks;
if (count) 
    tcp_outratectl_timerticks = *count;

我从库中提取了目标文件并尝试查找符号

$ nm -A ./*.o | grep tcp_outratectl_timerticks
./tcp_timer.o:0000000000000018 B rumpns_tcp_outratectl_timerticks
./tcp_usrreq.o:                 U rumpns_tcp_outratectl_timerticks

如您所见,tcp_outratectl_tmofactor 是一个全局 BSS 符号,但它后面有“rumpns_”前缀,这会导致链接器错误。

我该如何解决这个问题?

【问题讨论】:

你链接的是 C 还是 C++? 我正在链接 C 这很奇怪,我以为 C 不会做任何类型的名称修改。 @merlin2011,C 有一些修饰方案,至少对于函数来说,以区分不同的调用约定。 @EricZ,我每天都能学到新东西。 :) 【参考方案1】:

我正在使用的外部库在还不是其命名空间一部分的符号后面添加了“rumpns_”。

修改 makefile 以删除此行为对我有用

【讨论】:

c#中如何调用动态链接库dll

...修饰符:访问修饰符,除了abstract以外在声明方法时可以使用的修饰符。返回变量类型:在DLL文件中你需调用方法的返回变量类型。方法名称:在DLL文件中你需调用方法的名称。参数列表:在DLL文件中你需调用方法的列表。注意... 查看详情

当我想在 C++ Builder Starter 中链接静态库 TinyXML 2 的发布版本时,为啥会出现未解决的外部错误?

...r中链接静态库TinyXML2的发布版本时,为啥会出现未解决的外部错误?【英文标题】:WhyIgetunresolvedexternalerrorswhenIwanttolinkthereleaseversionofthestaticlibraryTinyXML2inC++BuilderStarter?当我想在C++BuilderStarter中链接静态库TinyXML2的发布版本时,为... 查看详情

检查“与外部库链接”示例时的矛盾结果

...作者展示了一个链接外部库和头文件的示例。主要源代码使用“gdbm. 查看详情

如何使用标准库包名称解决 Python 包中的命名空间冲突?

】如何使用标准库包名称解决Python包中的命名空间冲突?【英文标题】:HowdoIresolvenamespaceconflictsinmyPythonpackageswithstandardlibrarypackagenames?【发布时间】:2011-11-1703:41:27【问题描述】:我正在开发一个磁盘上具有以下结构的包:foo/__... 查看详情

交叉编译时如何使用外部库?(代码片段)

...x86ubuntu机器上为raspberrypiARM目标编写了一些代码。我正在使用gcc-linaro-armhf工具链。我能够在pi上交叉编译并运行一些独立的程序。现在,我想将我的代码链接到外部库,如ncurses。我怎样才能做到这一点。我应该只将我的程序与主... 查看详情

如何在运行时解析 dll 中的外部符号,而不是使用 Cygwin 进行链接时

】如何在运行时解析dll中的外部符号,而不是使用Cygwin进行链接时【英文标题】:Howtoresolveexternalsymbolsindllatruntime,insteadoflinktimewithCygwin【发布时间】:2020-04-2816:36:22【问题描述】:我正在将一组程序从linux移植到Windows+Cygwin。集... 查看详情

在目标 c 中使用 nspredicate 时如何解决空间问题?

】在目标c中使用nspredicate时如何解决空间问题?【英文标题】:Howtoresolvespaceproblemswhileusingnspredicateinobjectivec?【发布时间】:2013-12-2615:42:33【问题描述】:我正在尝试从json响应中过滤产品列表。对于左侧表达式“状态”右侧,我... 查看详情

c#ajax的错误,应该如何解决?

我在c#中添加了Ajax,使用其中的日历控件,但是生成项目时,提示如下的错误信息:错误8命名空间“System.Web.UI”中不存在类型或命名空间名称“ScriptManager”(是缺少程序集引用吗?)错误9未能在全局命名空间中找到类型或命名空... 查看详情

名称空间

...位于全局名称空间中。3.未命名的名称空间。无法显式地使用using编译指令或using声明将未命名空间中的名称加入到其它命名空间中。这就提供了链接性为内部的静态变量的替代 查看详情

hiveload外部文件时如何区别分隔符与文本内容

参考技术A在测试hive的load性能时,我们在建表时指定使用|作为分隔符。这样就需要考虑一个问题:如果外部文本中|作为文本内容出现时,如何区分到底是分隔符还是文本内容。首先测试hive是否能智能区分分隔符与文本内容,结... 查看详情

C 与 C++ 中的外部函数

...件中,是否应该声明函数externvoidf();//oronlyvoidf();仅在C中使用时从C++使用时。【问题讨论】:【参考方案1】:在C或C++中声明函数时,[几乎]永远不需要使用关键字extern。在C和C++中,所有函数默认都有外部链接。在头文件中用exter 查看详情

链接库.a和库.lib(代码片段)

...上好,我需要你的帮助。我在代码块中开发了C++代码,并使用2个外部库(.lib)计算了复杂矩阵的特征向量和特征值。如图所示,我在编译器链接器设置中链接了这些库(.lib)。之后,我从该代码创建了一个静态库(.a)。我的... 查看详情

linux入门动静态库(代码片段)

...链接,最终形成可执行程序。当一堆.o文件要被大量使用时,我们把这些目标文件进行打包,就形成了一个库。动静态库的各自特征静态库:程序在进行汇编链接时,把库的代码直接复制到可执行文件中。这样... 查看详情

linux下静态库动态库的创建与调用(代码片段)

...0c;也会自己创建动态库给别人或者给自己其他的工程项目使用。库的类型分为动态库、静态库。在Linux下动态库的后缀为.so,静态库的后缀为.lib。动态库称为共享库.程序在编译的时需要、运行的时候也需。静态库在编译的时... 查看详情

如何解决两个不使用命名空间的第三方库之间的类名冲突?

】如何解决两个不使用命名空间的第三方库之间的类名冲突?【英文标题】:Howtoresolveclass-nameconflictsbetweentwothird-partylibrariesthatdonotusenamespaces?【发布时间】:2018-05-1810:36:58【问题描述】:我的项目使用了两个第三方开源库,两个... 查看详情

使用犰狳库时如何解决编译问题

】使用犰狳库时如何解决编译问题【英文标题】:HowtosolvethecompilingproblemswhenIusearmadillolibrary\'【发布时间】:2020-04-0400:03:02【问题描述】:我是C++新手,我尝试使用Armadillo来查找对称矩阵的特征值(eig_sym是函数的名称)。我使用... 查看详情

静态库介绍与简单演练及同名资源冲突解决

...库:.a和.framework动态库:.dylib和.framework(iOS9取消了.dylib,使用.tbd替代) 2、静态库和动态库在使用上的区别:静态库:链接时,静态库中使用的文件会被完整的复制到可执行文件中,被多次使用就有多次冗余拷贝动态库:链接... 查看详情

用 C++ 链接 C 库

...个dll文件。该文件被编译为C代码。我想在一个新项目中使用这个dll文件。这个新项目是一个C++项目。如果我编译我的新项目,一切都很好,但是当项目被编译为C++程序时,它会为从dll文件导出的函数提供未解决的外部符号错误... 查看详情