-
Notifications
You must be signed in to change notification settings - Fork 40
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
Compilation failure #21
Comments
I am not sure that I pinpointed the actual problem correctly here is the error from
It seems that the build fails, because I have a successful build at another system, but when I try to build rdma-core downloaded by ibverbs-sys manually, I see the same error. |
Hmm, this seems more like an issue with the host system missing a |
[root@k8s-1 rust-ibverbs]# cargo build Caused by: --- stderr
CMake Error at /usr/local/share/cmake-3.22/Modules/FindPkgConfig.cmake:603 (message): vendor/rdma-core/libibverbs/verbs.h:600:32: error: use of undeclared identifier 'IBV_ACCESS_OPTIONAL_FIRST' @jonhoo Please help me take a look at this error. |
The error output indicates the problem:
I'm going to go ahead and close this issue, since none of these errors appear related to this crate. |
yes, and the version of the clang must >= 3.9, is it needed to update the readme? @jonhoo |
I have other question, how to run the example? |
I don't think clang >= 3.9 is needed? You run the example the same way other Rust examples are run |
Are these libraries currently used in production? @jonhoo |
@zhucan This library links against @microyahoo I don't know of any production users, but could be. |
I came across this again recently, and I think this actually happens if you try to build RDMA too "deeply" in your file system. That is, literally if your path is too many characters. You hit this assert, which is there to guard against overflowing the struct that holds UNIX socket paths. The solution, as far as I can tell, is to build at a shorter path 😅 |
When using `IN_PLACE=1`, the build assumes that the build directory will _also_ be the run directory[1], which doesn't hold for our case. Furthermore, it's actively problematic as it means we'll end up fairly long paths, which can cause sadness[2][3]. Specifically, rdma-core has an assert[2] that triggers if the path to one of the build dependencies is longer than what's allowed for UNIX sockets[3]. The assert uses `IBACM_SERVER_PATH`, which is set[4] to `@CMAKE_INSTALL_FULL_RUNDIR@/ibacm.sock`. That is in turn set[5] to ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_RUNDIR} (when `CMAKE_INSTALL_RUNDIR` isn't set to an absolute path, which is the case for the default of "var/run"). `CMAKE_INSTALL_PREFIX` is set to the project directory of rdma-core when `IN_PLACE=1`, which may be quite deep, and thus the whole thing is likely to exceed the 108 bytes allowed for `sun_path`. It's worth noting that since we only build in order to get the various header files so we can then generate bindings from them, the setting of the various `CMAKE_INSTALL_*` options that `IN_PLACE=1` set _shouldn't_ have anything to say for us. [1]: https://github.com/linux-rdma/rdma-core/blob/fb965e2d0f670d1e3474f9333b332f6b4954201c/CMakeLists.txt#L92-L100 [2]: #21 (comment). [3]: https://docs.rs/crate/ibverbs-sys/0.2.1+52.0/builds/1297723 [4]: https://github.com/linux-rdma/rdma-core/blob/fb965e2d0f670d1e3474f9333b332f6b4954201c/librdmacm/acm.c#L105-L106 [5]: https://man7.org/linux/man-pages/man7/unix.7.html). It's not [6]: https://github.com/linux-rdma/rdma-core/blob/fb965e2d0f670d1e3474f9333b332f6b4954201c/buildlib/config.h.in#L35 [7]: https://github.com/linux-rdma/rdma-core/blob/fb965e2d0f670d1e3474f9333b332f6b4954201c/CMakeLists.txt#L138
When using `IN_PLACE=1`, the build assumes that the build directory will _also_ be the run directory[1], which doesn't hold for our case. Furthermore, it's actively problematic as it means we'll end up fairly long paths, which can cause sadness[2][3]. Specifically, rdma-core has an assert[2] that triggers if the path to one of the build dependencies is longer than what's allowed for UNIX sockets[3]. The assert uses `IBACM_SERVER_PATH`, which is set[4] to `@CMAKE_INSTALL_FULL_RUNDIR@/ibacm.sock`. That is in turn set[5] to ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_RUNDIR} (when `CMAKE_INSTALL_RUNDIR` isn't set to an absolute path, which is the case for the default of "var/run"). `CMAKE_INSTALL_PREFIX` is set to the project directory of rdma-core when `IN_PLACE=1`, which may be quite deep, and thus the whole thing is likely to exceed the 108 bytes allowed for `sun_path`. It's worth noting that since we only build in order to get the various header files so we can then generate bindings from them, the setting of the various `CMAKE_INSTALL_*` options that `IN_PLACE=1` set _shouldn't_ have anything to say for us. [1]: https://github.com/linux-rdma/rdma-core/blob/fb965e2d0f670d1e3474f9333b332f6b4954201c/CMakeLists.txt#L92-L100 [2]: #21 (comment) [3]: https://docs.rs/crate/ibverbs-sys/0.2.1+52.0/builds/1297723 [4]: https://github.com/linux-rdma/rdma-core/blob/fb965e2d0f670d1e3474f9333b332f6b4954201c/librdmacm/acm.c#L105-L106 [5]: https://man7.org/linux/man-pages/man7/unix.7.html [6]: https://github.com/linux-rdma/rdma-core/blob/fb965e2d0f670d1e3474f9333b332f6b4954201c/buildlib/config.h.in#L35 [7]: https://github.com/linux-rdma/rdma-core/blob/fb965e2d0f670d1e3474f9333b332f6b4954201c/CMakeLists.txt#L138
When using `IN_PLACE=1`, the build assumes that the build directory will _also_ be the run directory[1], which doesn't hold for our case. Furthermore, it's actively problematic as it means we'll end up fairly long paths, which can cause sadness[2][3]. Specifically, rdma-core has an assert[4] that triggers if the path to one of the build dependencies is longer than what's allowed for UNIX sockets[5]. The assert uses `IBACM_SERVER_PATH`, which is set[6] to `@CMAKE_INSTALL_FULL_RUNDIR@/ibacm.sock`. That is in turn set[7] to ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_RUNDIR} (when `CMAKE_INSTALL_RUNDIR` isn't set to an absolute path, which is the case for the default of "var/run"). `CMAKE_INSTALL_PREFIX` is set to the project directory of rdma-core when `IN_PLACE=1`, which may be quite deep, and thus the whole thing is likely to exceed the 108 bytes allowed for `sun_path`. It's worth noting that since we only build in order to get the various header files so we can then generate bindings from them, the setting of the various `CMAKE_INSTALL_*` options that `IN_PLACE=1` set _shouldn't_ have anything to say for us. [1]: https://github.com/linux-rdma/rdma-core/blob/fb965e2d0f670d1e3474f9333b332f6b4954201c/CMakeLists.txt#L92-L100 [2]: #21 (comment) [3]: https://docs.rs/crate/ibverbs-sys/0.2.1+52.0/builds/1297723 [4]: https://github.com/linux-rdma/rdma-core/blob/fb965e2d0f670d1e3474f9333b332f6b4954201c/librdmacm/acm.c#L105-L106 [5]: https://man7.org/linux/man-pages/man7/unix.7.html [6]: https://github.com/linux-rdma/rdma-core/blob/fb965e2d0f670d1e3474f9333b332f6b4954201c/buildlib/config.h.in#L35 [7]: https://github.com/linux-rdma/rdma-core/blob/fb965e2d0f670d1e3474f9333b332f6b4954201c/CMakeLists.txt#L138
When using `IN_PLACE=1`, the build assumes that the build directory will _also_ be the run directory[1], which doesn't hold for our case. Furthermore, it's actively problematic as it means we'll end up fairly long paths, which can cause sadness ([2], [3]). Specifically, rdma-core has an assert[4] that triggers if the path to one of the build dependencies is longer than what's allowed for UNIX sockets[5]. The assert uses `IBACM_SERVER_PATH`, which is set[6] to `@CMAKE_INSTALL_FULL_RUNDIR@/ibacm.sock`. That is in turn set[7] to ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_RUNDIR} (when `CMAKE_INSTALL_RUNDIR` isn't set to an absolute path, which is the case for the default of "var/run"). `CMAKE_INSTALL_PREFIX` is set to the project directory of rdma-core when `IN_PLACE=1`, which may be quite deep, and thus the whole thing is likely to exceed the 108 bytes allowed for `sun_path`. It's worth noting that since we only build in order to get the various header files so we can then generate bindings from them, the setting of the various `CMAKE_INSTALL_*` options that `IN_PLACE=1` set _shouldn't_ have anything to say for us. [1]: https://github.com/linux-rdma/rdma-core/blob/fb965e2d0f670d1e3474f9333b332f6b4954201c/CMakeLists.txt#L92-L100 [2]: #21 (comment) [3]: https://docs.rs/crate/ibverbs-sys/0.2.1+52.0/builds/1297723 [4]: https://github.com/linux-rdma/rdma-core/blob/fb965e2d0f670d1e3474f9333b332f6b4954201c/librdmacm/acm.c#L105-L106 [5]: https://man7.org/linux/man-pages/man7/unix.7.html [6]: https://github.com/linux-rdma/rdma-core/blob/fb965e2d0f670d1e3474f9333b332f6b4954201c/buildlib/config.h.in#L35 [7]: https://github.com/linux-rdma/rdma-core/blob/fb965e2d0f670d1e3474f9333b332f6b4954201c/CMakeLists.txt#L138
Finally fixing this now that I know what's causing it: #41 |
When using `IN_PLACE=1`, the build assumes that the build directory will _also_ be the run directory[1], which doesn't hold for our case. Furthermore, it's actively problematic as it means we'll end up fairly long paths, which can cause sadness (#21, [2]). Specifically, rdma-core has an assert[3] that triggers if the path to one of the build dependencies is longer than what's allowed for UNIX sockets[4]. The assert uses `IBACM_SERVER_PATH`, which is set[5] to `@CMAKE_INSTALL_FULL_RUNDIR@/ibacm.sock`. That is in turn set[6] to ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_RUNDIR} (when `CMAKE_INSTALL_RUNDIR` isn't set to an absolute path, which is the case for the default of "var/run"). `CMAKE_INSTALL_PREFIX` is set to the project directory of rdma-core when `IN_PLACE=1`, which may be quite deep, and thus the whole thing is likely to exceed the 108 bytes allowed for `sun_path`. It's worth noting that since we only build in order to get the various header files so we can then generate bindings from them, the setting of the various `CMAKE_INSTALL_*` options that `IN_PLACE=1` set _shouldn't_ have anything to say for us. Fixes #21 and (hopefully) docs.rs builds. [1]: https://github.com/linux-rdma/rdma-core/blob/fb965e2d0f670d1e3474f9333b332f6b4954201c/CMakeLists.txt#L92-L100 [2]: https://docs.rs/crate/ibverbs-sys/0.2.1+52.0/builds/1297723 [3]: https://github.com/linux-rdma/rdma-core/blob/fb965e2d0f670d1e3474f9333b332f6b4954201c/librdmacm/acm.c#L105-L106 [4]: https://man7.org/linux/man-pages/man7/unix.7.html [5]: https://github.com/linux-rdma/rdma-core/blob/fb965e2d0f670d1e3474f9333b332f6b4954201c/buildlib/config.h.in#L35 [6]: https://github.com/linux-rdma/rdma-core/blob/fb965e2d0f670d1e3474f9333b332f6b4954201c/CMakeLists.txt#L138
When using `IN_PLACE=1`, the build assumes that the build directory will _also_ be the run directory[1], which doesn't hold for our case. Furthermore, it's actively problematic as it means we'll end up fairly long paths, which can cause sadness (#21, [2]). Specifically, rdma-core has an assert[3] that triggers if the path to one of the build dependencies is longer than what's allowed for UNIX sockets[4]. The assert uses `IBACM_SERVER_PATH`, which is set[5] to `@CMAKE_INSTALL_FULL_RUNDIR@/ibacm.sock`. That is in turn set[6] to ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_RUNDIR} (when `CMAKE_INSTALL_RUNDIR` isn't set to an absolute path, which is the case for the default of "var/run"). `CMAKE_INSTALL_PREFIX` is set to the project directory of rdma-core when `IN_PLACE=1`, which may be quite deep, and thus the whole thing is likely to exceed the 108 bytes allowed for `sun_path`. It's worth noting that since we only build in order to get the various header files so we can then generate bindings from them, the setting of the various `CMAKE_INSTALL_*` options that `IN_PLACE=1` set _shouldn't_ have anything to say for us. Fixes #21 and (hopefully) docs.rs builds. [1]: https://github.com/linux-rdma/rdma-core/blob/fb965e2d0f670d1e3474f9333b332f6b4954201c/CMakeLists.txt#L92-L100 [2]: https://docs.rs/crate/ibverbs-sys/0.2.1+52.0/builds/1297723 [3]: https://github.com/linux-rdma/rdma-core/blob/fb965e2d0f670d1e3474f9333b332f6b4954201c/librdmacm/acm.c#L105-L106 [4]: https://man7.org/linux/man-pages/man7/unix.7.html [5]: https://github.com/linux-rdma/rdma-core/blob/fb965e2d0f670d1e3474f9333b332f6b4954201c/buildlib/config.h.in#L35 [6]: https://github.com/linux-rdma/rdma-core/blob/fb965e2d0f670d1e3474f9333b332f6b4954201c/CMakeLists.txt#L138
Hello,
when I try to compile rust-ibverbs, I get an error with the following error message during compilation of the rdma-core package.
The issue happens it this line:
inside
~/.cargo/registry/src/github.jparrowsec.cn-1ecc6299db9ec823/ibverbs-sys-0.1.0/vendor/rdma-core/librdmacm/acm.c
The reason is that
IBACM_SERVER_PATH
generated during configure step is too long (>108 chars). And it is too long, because it is<build directory>/var/run/ibacm.sock
.The text was updated successfully, but these errors were encountered: