V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jdOY
V2EX  ›  程序员

关于 MBP 上链接静态库失败的问题

  •  
  •   jdOY · 2023-02-12 05:47:02 +08:00 · 863 次点击
    这是一个创建于 657 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近找了个开源的项目,准备编译成静态库自己使用,但是在 M1 的 mac 上链接编译的时候报错了,网上搜了一圈都没有解决方法,来问下有没有大佬遇到过这样的问题。
    开源项目是 c 语言开发的,自己开发的代码也是 c,编译器用的 mac 自带的 clang ,项目用 cmake 构建,后面我写了简单的 demo ,直接使用命令行编译也是一样的错误,实在有点想不明白。
    错误如下:
    Undefined symbols for architecture arm64:
    "_main", referenced from:
    implicit entry/start for main executable
    ld: symbol(s) not found for architecture arm64
    clang: error: linker command failed with exit code 1 (use -v to see invocation)


    系统:
    CPU: Apple M1 Max
    内存: 64G
    系统版本: macOS Monterey 12.6 (21G115)
    

    clang 版本:

    Apple clang version 14.0.0 (clang-1400.0.29.102)
    Target: arm64-apple-darwin21.6.0
    Thread model: posix
    InstalledDir: /Library/Developer/CommandLineTools/usr/bin
    

    cmake 版本:

    cmake version 3.25.2
    CMake suite maintained and supported by Kitware (kitware.com/cmake).
    

    Demo 静态库代码:

    tt.h
    
    #ifndef DLB_TT_H
    #define DLB_TT_H
    void hello(void);
    #endif //DLB_TT_H
    
    tt.c
    
    #include "tt.h"
    
    #include <stdio.h>
    
    void hello(void)
    {
    	printf("Hello, I m lj!\n");
    }
    
    missdeer
        1
    missdeer  
       2023-02-12 07:09:00 +08:00 via Android
    出错信息不是给了吗,缺 main 函数
    ysc3839
        2
    ysc3839  
       2023-02-12 13:38:50 +08:00 via Android
    cmake add_library STATIC
    jdOY
        3
    jdOY  
    OP
       2023-02-12 16:00:08 +08:00
    @missdeer 应该不是的,调用库的代码是有 main 函数的
    jdOY
        4
    jdOY  
    OP
       2023-02-12 16:00:45 +08:00
    @ysc3839 在 CMakeLists.txt 里面有加这个
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2788 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 05:47 · PVG 13:47 · LAX 21:47 · JFK 00:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.