ESP32 IDF-V4.0 ninja编译无法引用外部静态库的问题

xsp1989
Posts: 5
Joined: Tue Mar 17, 2020 8:13 am

ESP32 IDF-V4.0 ninja编译无法引用外部静态库的问题

Postby xsp1989 » Tue Mar 17, 2020 8:49 am

我在自己的项目里面引用了三个外部静态库,并且修改了CMakeLists.txt文件,增加了库路径等,在最后链接的时候,(引入的库里面报错)提示一些函数未定义,而这些函数是在自己的源文件里面实现的,并且已经链接到了libmain.a里面。

开发环境:Vscode+ESP-IDF插件,(在cmd命令行里面调用idf.py build也是同样的错误)
另外:
在mingw32环境使用make方式可以正常编译通过,说明代码和库是没有问题的。

请问一下,有人是否也遇到了同样的问题。
Last edited by xsp1989 on Mon Apr 27, 2020 10:11 am, edited 1 time in total.

xsp1989
Posts: 5
Joined: Tue Mar 17, 2020 8:13 am

Re: ESP32 IDF-V4.0 ninja编译无法引用外部静态库的问题

Postby xsp1989 » Wed Mar 18, 2020 3:58 am

这个问题看起来是静态库的依赖顺序问题,为啥传统的GNU Make不会有这个问题,而使用Ninja就会出现这个问题呢?

ESP_Gargamel
Posts: 786
Joined: Wed Nov 14, 2018 8:45 am

Re: ESP32 IDF-V4.0 ninja编译无法引用外部静态库的问题

Postby ESP_Gargamel » Thu Mar 19, 2020 5:33 am

不知道你工程结构是怎样的,你看下是否和你 component register 有关系,https://docs.espressif.com/projects/esp ... cmakelists,确认是否需要 REQUIRES 一些依赖。

xsp1989
Posts: 5
Joined: Tue Mar 17, 2020 8:13 am

Re: ESP32 IDF-V4.0 ninja编译无法引用外部静态库的问题

Postby xsp1989 » Sat Mar 21, 2020 3:55 am

谢谢您的解答!

问题已经解决,确实是库的顺序引起的依赖问题。
我这边的情况如下:
main组件里面的函数fun_main_a()调用了已经编译好的静态库中的函数fun_lib_1(),静态库中的函数fun_lib_1再调用main组件中的另外一个函数fun_main_b()
在编译的时候把fun_main_a()与fun_main_b()打包到了libmain.a静态库中,然后在链接阶段会出现找不到fun_main_a()或者fun_main_b()函数的情况。至于是找不到哪个函数取决于包含fun_lib_1()的库相对于libmain.a的位置。
我这边的解决方法是把fun_main_a()和fun_main_b()这两个函数分开,注册成另外一个组件,用REQUIRES声明来解决顺序问题。

但是还有个疑问就是用传统的GNU的方式为什么没有这个问题呢(使用make命令进行编译)?

ESP_Gargamel
Posts: 786
Joined: Wed Nov 14, 2018 8:45 am

Re: ESP32 IDF-V4.0 ninja编译无法引用外部静态库的问题

Postby ESP_Gargamel » Fri Mar 27, 2020 2:13 am

好的,方便的话,也提供一个 sample project,这样一方面我们可以再分析一下,另一方面也可以给其他开发者参考。

xsp1989
Posts: 5
Joined: Tue Mar 17, 2020 8:13 am

Re: ESP32 IDF-V4.0 ninja编译无法引用外部静态库的问题

Postby xsp1989 » Mon Apr 20, 2020 9:36 am

我在gpio的demo里面稍微修改了一下,可以复现出我提出的问题。
分别用mingw的make和cmd的idf.py build进行了编译
mingw的make可以正常编译通过
cmd的idy.py build方式报错如下:
图.jpg
图.jpg (41.67 KiB) Viewed 9263 times
事实上fun_c的函数已经在libmain.a中的func.obj文件中了
图2.png
图2.png (17.02 KiB) Viewed 9263 times
Attachments
gpio.zip
(4.82 KiB) Downloaded 585 times

Who is online

Users browsing this forum: No registered users and 34 guests