美文网首页
C语言是如何使链接的

C语言是如何使链接的

作者: 茶不思基 | 来源:发表于2020-02-15 20:22 被阅读0次

本文指在帮助需要的朋友理解链接的使用

[TOC]

环境准备

源文件 main.c

#include <stdio.h> 
int main()
{
     printf("Hello World from t1 Main!\n");
     return 0;
}

编译文件

gcc  -v main.c

生成a.out文件执行


image

编译日志为:

Apple LLVM version 10.0.1 (clang-1001.0.46.4)
Target: x86_64-apple-darwin18.6.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin
 "/Library/Developer/CommandLineTools/usr/bin/clang" -cc1 -triple x86_64-apple-macosx10.14.0 -Wdeprecated-objc-isa-usage -Werror=deprecated-objc-isa-usage -emit-obj -mrelax-all -disable-free -disable-llvm-verifier -discard-value-names -main-file-name main.c -mrelocation-model pic -pic-level 2 -mthread-model posix -mdisable-fp-elim -fno-strict-return -masm-verbose -munwind-tables -target-sdk-version=10.14 -target-cpu penryn -dwarf-column-info -debugger-tuning=lldb -target-linker-version 450.3 -v -resource-dir /Library/Developer/CommandLineTools/usr/lib/clang/10.0.1 -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk -I/usr/local/include -Wno-atomic-implicit-seq-cst -Wno-framework-include-private-from-public -Wno-atimport-in-framework-header -Wno-quoted-include-in-framework-header -fdebug-compilation-dir /Users/wangshengxing/project/c/gcc/ld/src -ferror-limit 19 -fmessage-length 159 -stack-protector 1 -fblocks -fencode-extended-block-signature -fregister-global-dtors-with-atexit -fobjc-runtime=macosx-10.14.0 -fmax-type-align=16 -fdiagnostics-show-option -fcolor-diagnostics -o /var/folders/d0/z0p0y29541n_z25rrkc8c5xw0000gn/T/main-377173.o -x c main.c
clang -cc1 version 10.0.1 (clang-1001.0.46.4) default target x86_64-apple-darwin18.6.0
ignoring nonexistent directory "/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/usr/local/include"
ignoring nonexistent directory "/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/Library/Frameworks"
#include "..." search starts here:
#include <...> search starts here:
 /usr/local/include
 /Library/Developer/CommandLineTools/usr/lib/clang/10.0.1/include
 /Library/Developer/CommandLineTools/usr/include
 /Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/usr/include
 /Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/System/Library/Frameworks (framework directory)
End of search list.
 "/Library/Developer/CommandLineTools/usr/bin/ld" -demangle -lto_library /Library/Developer/CommandLineTools/usr/lib/libLTO.dylib -no_deduplicate -dynamic -arch x86_64 -macosx_version_min 10.14.0 -syslibroot /Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk -o a.out /var/folders/d0/z0p0y29541n_z25rrkc8c5xw0000gn/T/main-377173.o -L/usr/local/lib -lSystem /Library/Developer/CommandLineTools/usr/lib/clang/10.0.1/lib/darwin/libclang_rt.osx.a

连接文件

编译文件

执行

gcc  main.c

输出 main.o文件

初步连接

执行

ld main.o -o hello

输出

ld: warning: No version-min specified on command line
Undefined symbols for architecture x86_64:
  "_printf", referenced from:
      _main in main.o
ld: symbol(s) not found for inferred architecture x86_64

没有找到引用,说明没有找到链接库:

查看链接库

执行:

otool -L a.out

输出:


image

说明需要连接System库


image

加入System库

执行

ld   -o hello main.o -L/usr/local/lib -lSystem

输出

image

说明已经链接成功

详细参数说明

版本1

ld   -arch x86_64 -macosx_version_min 10.14.0  -o hello main.o -L/usr/local/lib -lSystem 

版本2

ld  -demangle -lto_library /Library/Developer/CommandLineTools/usr/lib/libLTO.dylib -no_deduplicate -dynamic -arch x86_64 -macosx_version_min 10.14.0 -syslibroot /Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk -o hello main.o -L/usr/local/lib -lSystem /Library/Developer/CommandLineTools/usr/lib/clang/10.0.1/lib/darwin/libclang_rt.osx.a

相关文章

  • C语言是如何使链接的

    本文指在帮助需要的朋友理解链接的使用 [TOC] 环境准备 源文件 main.c 编译文件 生成a.out文件执行...

  • 使用OC二进制流进行发送消息

    //ios这里实现socket的链接,使C语言//1.与服务器通过三次握手实现链接NSString *host =...

  • C++基础:类与对象一

    作者:慧科集团华东校区-朱家聪老师,转载请注明出处及本链接。 C++的基本语法 include 与C语言中相同,使...

  • 浅谈C语言数组与指针的关系

    浅谈指针定义细节及其与数组的关系 前言 翁恺老师曾经说过,指针是 C 语言的灵魂,是使 C 语言成为 “C语言” ...

  • Runtime源码编译

    Objective-C是基于c语言的封装,使C语言具有了面向对象的能力.OC的本质最终还是转换c语言来执行,而这个...

  • runtime的基本使用

    OC语言是基于C语言进行封装的一种面向对象的语言,因此OC的底层就是C,runtime则是用来链接OC与C,用C语...

  • Java学习笔记1

    Java基础 1、Java简介 主要特性: Java语言是简单的:Java语言的语法与C语言和C++语言很接近,使...

  • 03.链接属性

    C语言的链接属性 c语言链接属性一共有三种 external(外部) internal(内部) none(无) n...

  • 推荐“C语言中文网”的《C语言入门 》进行学习C语言,通俗易懂

    推荐“C语言中文网”的《C语言入门 》进行学习C语言,通俗易懂,详见链接:http://c.biancheng.n...

  • Linux下C++编程使用动态链接库

    在《Linux下C编程使用动态链接库》一文中已了解到了C语言里如何使用共享库SO了,但在C++里可全是类,该如何实...

网友评论

      本文标题:C语言是如何使链接的

      本文链接:https://www.haomeiwen.com/subject/rbnyfhtx.html