首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C连接错误(与tcc)

C连接错误(与tcc)
EN

Stack Overflow用户
提问于 2017-04-01 10:11:59
回答 2查看 4.3K关注 0票数 4

我正在尝试从微小cc (tcc-0.9.26-win64-bin.zip)运行一个名为libtcc_test.c的示例。

我把libtcc.hlibtcc复制到include,把libtcc.def复制到lib

然后运行tcc ./examples/libtcc_test.c并得到一个链接错误:/

代码语言:javascript
复制
tcc: error: undefined symbol 'tcc_new'
tcc: error: undefined symbol 'tcc_set_lib_path'
tcc: error: undefined symbol 'tcc_set_output_type'
tcc: error: undefined symbol 'tcc_compile_string'
tcc: error: undefined symbol 'tcc_add_symbol'
tcc: error: undefined symbol 'tcc_relocate'
tcc: error: undefined symbol 'tcc_get_symbol'
tcc: error: undefined symbol 'tcc_delete'

我错过了什么?

更多信息:

代码语言:javascript
复制
P:\cpp\tcc>tcc ./examples/libtcc_test.c -vv
tcc version 0.9.26 (i386 Win32)
-> ./examples/libtcc_test.c
-> p:/cpp/tcc/include/stdlib.h
->  p:/cpp/tcc/include/_mingw.h
->   p:/cpp/tcc/include/stddef.h
->   p:/cpp/tcc/include/stdarg.h
->  p:/cpp/tcc/include/limits.h
->  p:/cpp/tcc/include/sec_api/stdlib_s.h
->   p:/cpp/tcc/include/stdlib.h
->  p:/cpp/tcc/include/malloc.h
-> p:/cpp/tcc/include/stdio.h
->  p:/cpp/tcc/include/vadefs.h
->  p:/cpp/tcc/include/sec_api/stdio_s.h
->   p:/cpp/tcc/include/stdio.h
-> p:/cpp/tcc/include/string.h
->  p:/cpp/tcc/include/sec_api/string_s.h
->   p:/cpp/tcc/include/string.h
-> p:/cpp/tcc/include/libtcc.h
-> p:/cpp/tcc/lib/libtcc1.a
-> p:/cpp/tcc/lib/msvcrt.def
-> p:/cpp/tcc/lib/kernel32.def
tcc: error: undefined symbol 'tcc_new'
tcc: error: undefined symbol 'tcc_set_lib_path'
tcc: error: undefined symbol 'tcc_set_output_type'
tcc: error: undefined symbol 'tcc_compile_string'
tcc: error: undefined symbol 'tcc_add_symbol'
tcc: error: undefined symbol 'tcc_relocate'
tcc: error: undefined symbol 'tcc_get_symbol'
tcc: error: undefined symbol 'tcc_delete'
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-04-01 10:40:40

要链接到库中,需要在所有-l${library_basename}文件或o文件之后添加一个c标志。如果库名为libtcc.alibtcc.so (在Windows上可能是tcc.dlllibtcc.dll),则需要添加-ltcc

代码语言:javascript
复制
tcc  ./examples/libtcc_test.c  -ltcc

还可能需要添加-L标志以添加搜索路径,以防要链接的库不是系统的标准库目录:

代码语言:javascript
复制
tcc -L . ./examples/libtcc_test.c -ltcc
#also look for libtcc.so or libtcc.a in the current directory (.)

tinycc中来自libtcc_test.ctest/libtcc_test.c还需要dl库(用于动态加载的标准库)来构建:

代码语言:javascript
复制
tcc -L .  tests/libtcc_test.c  -ltcc -ldl #worked 

(它抱怨未定义的dlopendlclosedlsym,它们已知来自libdl)。

票数 5
EN

Stack Overflow用户

发布于 2017-07-05 00:38:14

以下命令适用于Windows:

代码语言:javascript
复制
cd your-tcc-directory
tcc -Ilibtcc -L. -ltcc examples/libtcc_test.c

您可能需要添加-run以跳过生成exe文件并直接运行源代码。

我在Linux上试过,但它找不到libtcc.h。我想下面的内容会起作用(注意-ltcc1而不是-ltcc):

代码语言:javascript
复制
tcc -I/path/to/libtcc.h/location -L/usr/lib/tcc/x86-64 -ltcc1 path/to/libtcc_test.c
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43155517

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档