[lustre-discuss] lustreapi not found when compiling sample C program

Apostolis Stamatis el18034 at mail.ntua.gr
Thu Jul 25 11:58:26 PDT 2024


These were the steps I was following, however I probably forgot to 
install some packages/had mismatching packages from other installations, 
after trying again on a fresh vm the above works.

As a follow up question, is there a way to install / include only the 
libraries / headers necessary for the lustreapi?

For context, I am trying to add the lustreapi to another project as a 
third-party dependency. I would like to only have the necessary 
libraries/headers in a thirdparty/lib and thirdparty/includes directory, 
instead of installing the deb packages. For this I don't know whether 
the system where my project is compiled is the one mounting the lustre 
fs (and thus has the client installed) so I want to have only the 
absolute necessary for compilation.

Thanks in advance,

Apostolis Stamatis


On 11/7/24 02:04, Andreas Dilger wrote:
> Why not build packages and install them properly?  There are a few 
> pages on https://wiki.lustre.org/ for this (which should be updated if 
> they are missing some info), but the TLDR to build a client is to run 
> in the Lustre Git checkout tree:
>
>     sh autogen.sh
>     ./configure --disable-tests --disable-server
>     make debs
>
> (or "make rpms" for RH/SLES) and then install the resulting packages 
> should work for most people if the pre-compiled packages do not.  This 
> avoids copying the files around, ensures that those files are cleaned 
> up when new packages are installed/removed, has proper dependencies, etc.
>
> Cheers, Andreas
>
>> On Jul 10, 2024, at 15:55, Apostolis Stamatis via lustre-discuss 
>> <lustre-discuss at lists.lustre.org> wrote:
>>
>> Hello all,
>>
>> Sharing an update on this issue to help anyone in the future 
>> encountering similar problems.
>>
>> The first solution I tried was to abandon the installation from 
>> source and install the deb packages. This fixed the issues with the 
>> linker and the compiler and I was able to use the C api, because it 
>> put the files on the default paths for gcc and ld. However, this 
>> caused other issues when I went to mount the filesystem (eg modprobe 
>> lustre not working), to my understanding caused by the deb packages 
>> being built for a slightly different kernel version.
>>
>> So this made me go back to installing from source and building the 
>> deb packages myself. In order to fix my path errors, I manually 
>> copied the required files to the default paths used by gcc and ld. I 
>> understand this is not necessary, as I can also add the paths when 
>> compiling. However this made me wonder whether there is a way to 
>> directly generate/copy the include files/libraries on the system 
>> defaults ? Looked through the docs but couldn't find anything on this.
>>
>> In any case, what I needed to copy for my use case (there might be 
>> additional files for completeness which I didn't need, not sure):
>>
>> cp lustre-release/lustre/include/lustre/*.h /usr/include/lustre/
>>
>> cp lustre-release/lustre/include/uapi/linux/lustre/*.h 
>> /usr/include/linux/lustre/
>>
>> cp lustre-release/debian/lustre-dev/usr/lib/* /usr/lib/
>>
>> After that the simple `gcc test.c -llustreapi` worked
>>
>> Thanks for the help, feel free to add anything you might think is 
>> useful (potentially a better way to do what I described)
>>
>> Regards,
>>
>> Apostolis
>>
>>
>> On 4/7/24 19:13, Apostolis Stamatis via lustre-discuss wrote:
>>> Thanks for the help Andreas, indeed installing the lustre-dev and 
>>> lustre-client-utils packages solved the issue with the lustreapi 
>>> library.
>>>
>>> However I am still getting an error:
>>>
>>> ```
>>>
>>> /usr/bin/ld: /tmp/cceAX1ZW.o: in function `main':
>>> test_file.c:(.text+0x37): undefined reference to `llapi_file_create'
>>> collect2: error: ld returned 1 exit status
>>>
>>> ```
>>>
>>> This leads me to believe I am doing something else wrong 
>>> (potentially with the includes?).
>>>
>>> Anyone with any input on what the issue might be or alternatively 
>>> the steps they have followed to use the C lustre api?
>>>
>>> Cheers, Apostolis
>>>
>>>
>>> On 8/6/24 21:19, Andreas Dilger wrote:
>>>> On Jun 8, 2024, at 08:14, Apostolis Stamatis via lustre-discuss 
>>>> <lustre-discuss at lists.lustre.org> wrote:
>>>>>
>>>>> Hello everyone,
>>>>>
>>>>> I am trying to use the C api for lustre, using Ubuntu 22.04, 
>>>>> kernel version 5.15.0-107 and lustre client modules version 2.15.4
>>>>> I am building lustre from source with the following steps (removed 
>>>>> some junk like git clone and cd) (mainly from the guide 
>>>>> https://metebalci.com/blog/lustre-2.15.4-on-rhel-8.9-and-ubuntu-22.04/)
>>>>
>>>> It would be great to copy this page to wiki.lustre.org 
>>>> <http://wiki.lustre.org>. It is a bit ironic that this page is 
>>>> mentioning that the wiki is outdated, but then proceeds to not 
>>>> update the wiki with new content...
>>>>
>>>>> ```
>>>>> sudo apt install build-essential libtool pkg-config flex bison 
>>>>> libpython3-dev libmount-dev libaio-dev libssl-dev libnl-genl-3-dev 
>>>>> libkeyutils-dev libyaml-dev libreadline-dev module-assistant 
>>>>> debhelper dpatch libsnmp-dev mpi-default-dev quilt swig
>>>>> sh autogen.sh
>>>>> ./configure --disable-server
>>>>> make dkms-debs
>>>>> sudo dpkg -i debs/lustre-client-modules-dkms_2.15.4-1_amd64.deb
>>>>> sudo apt --fix-broken install
>>>>> sudo dpkg -i debs/lustre-client-utils_2.15.4-1_amd64.deb
>>>>> ```
>>>>
>>>>> The client works as expected and can mount and modify the filesystem.
>>>>> However when I try to compile the sample program using gcc v 
>>>>> 11.4.0 with the command
>>>>> `gcc -I/usr/src/lustre-client-modules-2.15.4/lustre/include 
>>>>> -I/usr/src/lustre-client-modules-2.15.4/lustre/include/uapi/ 
>>>>> -I/usr/src/lustre-client-modules-2.15.4/lustre/include/lustre 
>>>>> -llustreapi test_file.c -o test`
>>>>> I get the error `/usr/bin/ld: cannot find -llustreapi: No such 
>>>>> file or directory`
>>>>>
>>>>> After trying to find the lustreapi library manually, indeed I 
>>>>> can't seem to find it anywhere
>>>>
>>>> According to the most recent build on the b2_15 branch on Ununtu 
>>>> 22.04 
>>>> https://build.whamcloud.com/job/lustre-b2_15/87/arch=x86_64,build_type=client,distro=ubuntu2204,ib_stack=inkernel/ 
>>>>
>>>>
>>>> There is a "lustre-dev" package built, and it looks like that this 
>>>> would contain the library files, "This package provides development 
>>>> libraries for the Lustre filesystem."
>>>>
>>>> Cheers, Andreas
>>> _______________________________________________
>>> lustre-discuss mailing list
>>> lustre-discuss at lists.lustre.org
>>> http://lists.lustre.org/listinfo.cgi/lustre-discuss-lustre.org
>> _______________________________________________
>> lustre-discuss mailing list
>> lustre-discuss at lists.lustre.org
>> http://lists.lustre.org/listinfo.cgi/lustre-discuss-lustre.org
>
> Cheers, Andreas
> --
> Andreas Dilger
> Lustre Principal Architect
> Whamcloud
>
>
>
>
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.lustre.org/pipermail/lustre-discuss-lustre.org/attachments/20240725/91859cca/attachment.htm>


More information about the lustre-discuss mailing list