Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

link order: local target and a remote package depend the same package #1903

Closed
qqiangwu opened this issue Dec 11, 2021 · 6 comments
Closed
Labels
Milestone

Comments

@qqiangwu
Copy link

描述问题

image

image

编译test相关target时,target依赖了fmt和folly,folly也依赖了fmt,在macos上是正常链接的,但是在ubuntu:20.04上,链接会出问题,报folly到不到fmt中的符号

链接命令是

/usr/bin/g++ -o xxx_test build/.../xxx_test.cpp.o -m64 -L...(省略一堆link目录) -s -lgmock -lgtest -l gtest_main -lcloudkv -lfmt -lfolly_test_util -lfolly -lfollybenchmark -lzstd -llz4 -lglog -lgflags_nothreads -ldouble-conversion -levent_openssl -levent_pthreads -levent -levent_extra -levent_core -l ssdl -lcrypto -l<省略一堆boost> -lz -lbz2 -l pthread -ldl

image

排查下来的原因是,在link xxx_test里,link的order是先fmt,再folly。经过排查,把fmt移动到folly后面就解决了。
image

但是这样改还是有些费劲,需要人工来resolve依赖顺序。

期待的结果

链接正常

错误信息

相关环境

请提供编译和运行环境信息,下面是一些必须填写的基础信息,便于我们针对性排查问题:

  • xmake版本:v2.6.1
  • xmake运行平台:ubuntu:20.04
  • xmake目标平台:
  • g++版本:Ubuntu 9.3.0-17ubuntu1~20.04 9.3.0

其他信息

https://github.com/qqiangwu/cloudkv

@qqiangwu qqiangwu added the bug label Dec 11, 2021
@waruqi
Copy link
Member

waruqi commented Dec 11, 2021

你更新到 master 然后 重装 folly 试下,2.6.1里面有个link bug,后来 master 上有修复

@qqiangwu
Copy link
Author

qqiangwu commented Dec 11, 2021

我跑了xmake update masterxmake q -f,然后结果还是一样

@waruqi
Copy link
Member

waruqi commented Dec 12, 2021

拉了你的代码试了下,编译不过

error: In file included from src/db_impl.h:9,
                 from src/db.cpp:2:
src/task/task_manager.h:26:15: error: declaration of 'cloudkv::task* cloudkv::task_manager::task_ctx::task' changes meaning of 'task' [-fpermissive]
   26 |         task* task;
      |               ^~~~
In file included from src/task/task_manager.h:8,
                 from src/db_impl.h:9,
                 from src/db.cpp:2:
src/task/task.h:9:7: note: 'task' declared here as 'class cloudkv::task'
    9 | class task : private boost::noncopyable {
      |       ^~~~

@qqiangwu
Copy link
Author

抱歉,之前提升了编译器warning级别。现在已经修了。https://github.com/qqiangwu/cloudkv/runs/4498583342?check_suite_focus=true

@waruqi
Copy link
Member

waruqi commented Dec 13, 2021

更新到 dev 再试试,xmake update -s dev

@qqiangwu
Copy link
Author

qqiangwu commented Dec 13, 2021

ok了,感谢

@waruqi waruqi closed this as completed Dec 13, 2021
@waruqi waruqi added this to the v2.6.2 milestone Dec 13, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants