我正在尝试将GnuTLS Doc中的Gnutls示例集成到C ++类中。 不幸的是,在与g ++链接时,它会引发未定义的引用。 因此,我尝试不使用g ++进行更改就编译示例(在纯C中),但没有成功。 如果我使用gcc,它可以工作。

tino@develeee:~/Code/tlstests$ gcc tlsclient.c -lgnutls
/tmp/ccBqJdQr.o: In function `main':
tlsclient.c:(.text+0x3d0): undefined reference to `tcp_connect'
tlsclient.c:(.text+0x58d): undefined reference to `tcp_close'
collect2: ld returned 1 exit status
tino@develeee:~/Code/tlstests$ g++ tlsclient.c -lgnutls
/tmp/ccRq5DcT.o: In function `load_keys()':
tlsclient.c:(.text+0x186): undefined reference to gnutls_pcert_import_x509_raw(gnutls_pcert_st*, gnutls_datum_t const*, gnutls_x509_crt_fmt_t, unsigned int)'
tlsclient.c:(.text+0x299): undefined reference to gnutls_privkey_init(gnutls_privkey_st**)'
tlsclient.c:(.text+0x2b5): undefined reference to `gnutls_privkey_import_x509(gnutls_privkey_st*, gnutls_x509_privkey_int*, unsigned int)'
/tmp/ccRq5DcT.o: In function `main':
tlsclient.c:(.text+0x37e): undefined reference to `gnutls_certificate_set_retrieve_function2(gnutls_certificate_credentials_st*, int (*)(gnutls_session_int*, gnutls_datum_t const*, int, gnutls_pk_algorithm_t const*, int, gnutls_pcert_st**, unsigned int*, gnutls_privkey_st**))'
tlsclient.c:(.text+0x3d6): undefined reference to `tcp_connect()'
tlsclient.c:(.text+0x594): undefined reference to `tcp_close(int)'
collect2: ld returned 1 exit status

您可以看到,只有使用gnutls / abstract.h声明的函数才使用C ++编译器进行未定义。 (忽略对tcp_connect()和tcp_close()的未定义引用,它们根本没有定义并声明为extern)

我C ++是C加类和模板吗? 所以我无法想象为什么会出现这些错误。

有人以前有过这样的东西吗?

===============>>#1 票数:6 已采纳

将标头包装在extern "C" {}块中。 看起来gnutls/abstract.h作为C ++头文件包含在内。

===============>>#2 票数:1

同样,作者似乎也提供了c ++接口。

http://gnutls.org/manual/html_node/Simple-client-example-in-C_002b_002b.html

#include <gnutls/gnutlsxx.h>

  ask by Adam Weishaupt translate from so

未解决问题?本站智能推荐:

2回复

C预处理文件中有哪些不熟悉的行?

这是C中Hello World程序中GNU cpp的输出。我想知道这些行是什么意思? #Number Header_File_Location [Numbers] 这些依赖是什么? 如果是,那么什么? 行号?
5回复

在Linux C ++应用程序中查找和读取大文件

我使用G ++中的标准ftell和fseek选项遇到整数溢出,但是我想我错了,因为似乎ftell64和fseek64不可用。 我一直在搜索,很多网站似乎都使用lseek和off64_t数据类型进行引用,但是我还没有找到任何引用等于fseek的示例。 现在,我正在读取的文件是16GB + CS
2回复

从源代码构建gcc 5.2.0:配置:错误:C编译器无法创建可执行文件

我试图从本地$ HOME目录中的源代码构建gcc 5.2.0,但出现以下错误: 这是config.log的副本 任何帮助确定出什么问题将不胜感激。
1回复

未定义的参考共享库Linux [c ++]

我创建了一个名为a.so的共享对象,它与用c / c ++(linux)开发的可执行文件完美配合。 此共享库提供了一些用于集成到外部软件中的功能。 以下是此共享库的一些特征: 与RS232上的设备通讯 与服务器的TCP / IP + SSL通信 现在,我正在创建上述
5回复

使用Linux而不是UNIX来编译CS课程的C代码

我在线上的一门CS课程建议学生编译其源代码并在OS UNIX上运行valgrind之类的工具。 我对UNIX,Linux,它们的工具以及用c进行编码是完全陌生的。 我已经尝试在VMWare Player 3.1.3上安装FreeBSD 8.1,甚至设法使VMWare Tools运行。 但是
1回复

在C或C ++中使用GNU regex函数

谁能给我完整的示例程序,说明如何在gcc C或C ++中使用GNU regex函数( http://docs.freebsd.org/info/regex/regex.info.GNU_Regex_Functions.html ),以及re_pattern_buffer和re_compile_f
3回复

C的代码重构工具,可以在GNU / Linux上使用吗? FOSS更可取

已经提出了这个问题的变化,但并不是特定于GNU / Linux和C.我使用Komodo Edit作为我常用的编辑器,但我实际上更喜欢可以从CLI使用的东西。 我不需要C ++支持; 如果该工具只能处理普通的C,那很好。 我真的很感激任何方向,因为我找不到任何东西。 我希望自己不会被迫
1回复

列举C程序中的补充组

我想通过NSS发送请求以获取用户的补充组列表。 据我估计,以下程序应让我枚举所有组(以便随后可以比较成员): 我将这一假设基于id的源代码这一部分,该id将通过id -Gn执行(因为这是我要复制的功能)。 看起来它看起来像是通过getugroups (0, NULL, usernam
3回复

我对C库感到困惑

好的,这就是事情。 大多数人在第一次接触C语言时同时了解C标准库,我也不例外。 但是当我正在研究linux时,我倾向于与C库混淆。 首先,我知道你在Linux发行版上安装gcc作为一个静态库,你会得到一个很好的旧C标准库。 在那之后,当你连接到互联网时,你很快就会得到一个新的稳定版本
1回复

将作业放入前景外壳实现的c

我正在尝试制作自己的Linux Shell。 我已经修复了bg命令,它正在使用以下代码: 但是,fg命令无法正常工作。 当我键入“ fg 12345”(12345是进程ID)时,它将把该进程置于前台,但是我无法使用Ctrl-Z停止它,也不能使用Ctrl-C。 我的代码如下