[CDRIVER-2794] Add a patch to avoid using libresolv on AIX Created: 10/Aug/18  Updated: 18/Oct/22  Resolved: 13/Sep/18

Status: Closed
Project: C Driver
Component/s: libmongoc
Affects Version/s: 1.12.0
Fix Version/s: None

Type: Bug Priority: Major - P3
Reporter: Apeke [X] Assignee: A. Jesse Jiryu Davis
Resolution: Cannot Reproduce Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified
Environment:

AIX


Attachments: File mongo-c-driver-1.11.0-1.spec-RES1     File mongo-c-driver-1.11.0-1.spec-RES1     Text File mongo-c-driver-1.11.0-resolv.patch    
Issue Links:
Related
is related to PHPC-1706 AIX platforms shouldn't try linking w... Closed

 Description   

As libresolv is not used currently on AIX, we have an issue when building mongo-c-drive-1.12. So we wrote a patch to avoid that issue and we want to submit that for the community. If you are interested, could you tell us where to submit this patch pease ?

Thank you in advance.

Regards,

Sena 



 Comments   
Comment by Kevin Albertson [ 18/Oct/22 ]

libmongoc is not tested on AIX, so I prefer not making the changes ourselves unless we have AIX to test. I am open to reviewing a PR if a user can verify the solution.

Comment by Jeremy Mikola [ 18/Oct/22 ]

kevin.albertson@mongodb.com: I just came across this issue for the first time while revisiting PHPC-1706. For that issue, we added logic to CheckResolv.m4 to avoid linking libresolv on AIX platforms.

This seems to be supported by the AIX documentation for res_search, which says the function is provided by "Standard C Library (libc.a)".

I'm not sure if libmongoc is tested on AIX (PHPC doesn't have it in CI) but you might want to revisit this issue if it's still outstanding.

Comment by A. Jesse Jiryu Davis [ 13/Sep/18 ]

Let me know if you need more help resolving this issue, I'm happy to resume investigating.

Comment by A. Jesse Jiryu Davis [ 29/Aug/18 ]

Let me ask again, please:

  • Where is resolv.h on your system?
  • Where is libresolv.so on your system?

In order to build the driver, cmake needs to find both of these files, or neither of these files.

I seems to me that cmake is finding resolv.h, and the compiler also finds resolv.h, but the linker does not find libresolv.

Comment by Apeke [X] [ 29/Aug/18 ]

Hi Davis,

We use a specfile (.spec ) to make mongo-c-driver. There is not resolv.h in
our includes paths. Indeed, it is cmake files that were configured to use
libresolv, as:

  • cmake/FindResSearch.cmake(15): check_symbol_exists(res_nsearch resolv.h
    MONGOC_HAVE_RES_NSEARCH )
    -cmake/Modules/CheckSymbolExists.cmake(50):
    __CHECK_SYMBOL_EXISTS_IMPL(${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/CheckSymbolExists.c
    res_nsearch resolv.h MONGOC_HAVE_RES_NSEARCH ).

Regards,
Sena

:0
n

Le mar. 28 août 2018 à 22:12, A. Jesse Jiryu Davis (JIRA) <jira@mongodb.org>


Séna Apeke
-Doctorant en Bio-mathématique au Laboratoire de traitement
de l'information médicale (LaTIM INSERM 1101) ;

-Ingénieur en modélisation des systèmes, traitement de signal et d'image.

"La parfaite valeur est de faire sans témoins ce qu'on

  • serait capable de faire devant tout le monde." *
    (La Rochefoucauld)
Comment by A. Jesse Jiryu Davis [ 28/Aug/18 ]

Looks like you have resolv.h in your include path, but no libresolv in your library path? Is there a libresolv.so anywhere on your system? If not, why is there a resolv.h?

Comment by Apeke [X] [ 27/Aug/18 ]

Hi Davis,

Here is the whole CMake output, sorry to do not answered you fast, I was in
holidays.
Thank you,

Regards,
Sena

  1. vi mongo-c-driver-1.11.0-1.spec-RES1:
    ...........................
    collect2: fatal error: library libresolv not found
    compilation terminated.
    src/libmongoc/CMakeFiles/mongoc_shared.dir/build.make:1218: recipe for
    target 'src/libmongoc/libmongoc-1.0.so' failed
    gmake[2]: *** [src/libmongoc/libmongoc-1.0.so] Error 1
    gmake[2]: Leaving directory
    '/opt/freeware/src/packages/BUILD/mongo-c-driver-1.11.0/64bit'
    CMakeFiles/Makefile2:667: recipe for target
    'src/libmongoc/CMakeFiles/mongoc_shared.dir/all' failed
    gmake[1]: *** [src/libmongoc/CMakeFiles/mongoc_shared.dir/all] Error 2
    gmake[1]: Leaving directory
    '/opt/freeware/src/packages/BUILD/mongo-c-driver-1.11.0/64bit'
    Makefile:154: recipe for target 'all' failed
    gmake: *** [all] Error 2

Le lun. 13 août 2018 à 14:56, A. Jesse Jiryu Davis (JIRA) <jira@mongodb.org>


Séna Apeke
-Doctorant en Bio-mathématique au Laboratoire de traitement
de l'information médicale (LaTIM INSERM 1101) ;

-Ingénieur en modélisation des systèmes, traitement de signal et d'image.

"La parfaite valeur est de faire sans témoins ce qu'on

  • serait capable de faire devant tout le monde." *
    (La Rochefoucauld)


Séna Apeke
-Doctorant en Bio-mathématique au Laboratoire de traitement
de l'information médicale (LaTIM INSERM 1101) ;

-Ingénieur en modélisation des systèmes, traitement de signal et d'image.

"La parfaite valeur est de faire sans témoins ce qu'on

  • serait capable de faire devant tout le monde." *
    (La Rochefoucauld)
Comment by Apeke [X] [ 27/Aug/18 ]

Hi Davis,

Here is the whole CMake output, sorry to do not answered you fast, I was in
holidays.
Thank you,

Regards,
Sena

  1. vi mongo-c-driver-1.11.0-1.spec-RES1:
    ...........................
    collect2: fatal error: library libresolv not found
    compilation terminated.
    src/libmongoc/CMakeFiles/mongoc_shared.dir/build.make:1218: recipe for
    target 'src/libmongoc/libmongoc-1.0.so' failed
    gmake[2]: *** [src/libmongoc/libmongoc-1.0.so] Error 1
    gmake[2]: Leaving directory
    '/opt/freeware/src/packages/BUILD/mongo-c-driver-1.11.0/64bit'
    CMakeFiles/Makefile2:667: recipe for target
    'src/libmongoc/CMakeFiles/mongoc_shared.dir/all' failed
    gmake[1]: *** [src/libmongoc/CMakeFiles/mongoc_shared.dir/all] Error 2
    gmake[1]: Leaving directory
    '/opt/freeware/src/packages/BUILD/mongo-c-driver-1.11.0/64bit'
    Makefile:154: recipe for target 'all' failed
    gmake: *** [all] Error 2

Le lun. 13 août 2018 à 14:56, A. Jesse Jiryu Davis (JIRA) <jira@mongodb.org>


Séna Apeke
-Doctorant en Bio-mathématique au Laboratoire de traitement
de l'information médicale (LaTIM INSERM 1101) ;

-Ingénieur en modélisation des systèmes, traitement de signal et d'image.

"La parfaite valeur est de faire sans témoins ce qu'on

  • serait capable de faire devant tout le monde." *
    (La Rochefoucauld)
Comment by A. Jesse Jiryu Davis [ 13/Aug/18 ]

Thanks, can we please see the whole CMake output? Please delete CMakeCache.txt and CMakeFiles and run it again, we need to see everything starting from "The C compiler identification is" and ending with "Build files have been written to". That information will help diagnose why the CMake configuration doesn't work correctly on AIX.

Thank you!

Comment by Apeke [X] [ 13/Aug/18 ]

Hi Jesse,

As I explained it, we make mongo-c-driver-1.11 on AIX os with the following
options of cmake :

cmake . --trace --debug-trycompile --debug-output -G"Unix Makefiles" \
-DENABLE_BSON:STRING=ON \
-DENABLE_MONGOC:BOOL=ON \
-DENABLE_SHM_COUNTERS:BOOL=ON \
-DENABLE_SSL:STRING=OPENSSL \
-DENABLE_SASL:STRING=OFF \
-DENABLE_ICU:STRING=OFF \
-DENABLE_AUTOMATIC_INIT_AND_CLEANUP:BOOL=OFF \
-DENABLE_CRYPTO_SYSTEM_PROFILE:BOOL=ON \
-DENABLE_MAN_PAGES:BOOL=ON \
-DENABLE_TESTS:BOOL=ON \
-DWITH_Sphinx=no \
-DCMAKE_VERBOSE_MAKEFILE:BOOL=ON \
-DCMAKE_C_COMPILER="${CC}" \
-DCMAKE_C_FLAGS="$CFLAGS64" \
-DCMAKE_CXX_COMPILER="${CXX}" \
-DCMAKE_CXX_FLAGS="$CXXFLAGS64" \
-DCMAKE_EXE_LINKER_FLAGS="${LDFLAGS} " \
-DCMAKE_MODULE_LINKER_FLAGS="${LDFLAGS}" \
-DCMAKE_SHARED_LINKER_FLAGS="${LDFLAGS}" \
-DCMAKE_LINK_LIBRARY_FLAG="$CFLAGS" \
-DCMAKE_SHARED_LIBRARY_LINK="$LDFLAGS" \
-DCMAKE_AR=$AR \
-DENABLE_EXAMPLES:BOOL=OFF \
-DCMAKE_INSTALL_PREFIX=%{_prefix} \
-DCMAKE_LIBRARY_OUTPUT_DIRECTORY=%{_libdir64} \
-DBUILD_SHARED_LIBS=ON \
-DBUILD_STATIC_LIBS=OFF

We had obtained the following issue:

[ 42%] Linking C shared library libmongoc-1.0.so
cd
/opt/freeware/src/packages/BUILD/mongo-c-driver-1.11.0/64bit/src/libmongoc
&& /opt/freeware/bin/cmake -E cmake_link_script
CMakeFiles/mongoc_shared.dir/link.txt --verbose=1
/usr/bin/gcc -fPIC -L/opt/freeware/lib64 -L/opt/freeware/lib
-Wl,-blibpath:/opt/freeware/lib64:/opt/freeware/lib:/usr/lib:/lib -lintl
-shared -Wl,-G,-bnoipath -o libmongoc-1.0.so
CMakeFiles/mongoc_shared.dir/src/mongoc/mongoc-apm.c.o
CMakeFiles/mongoc_shared.dir/src/mongoc/mongoc-array.c.o
CMakeFiles/mongoc_shared.dir/src/mongoc/mongoc-async.c.o
CMakeFiles/mongoc_shared.dir/src/mongoc/mongoc-async-cmd.c.o
CMakeFiles/mongoc_shared.dir/src/mongoc/mongoc-buffer.c.o
CMakeFiles/mongoc_shared.dir/src/mongoc/mongoc-bulk-operation.c.o
CMakeFiles/mongoc_shared.dir/src/mongoc/mongoc-change-stream.c.o
CMakeFiles/mong
oc_shared.dir/src/mongoc/mongoc-client.c.o
CMakeFiles/mongoc_shared.dir/src/mongoc/mongoc-client-pool.c.o
CMakeFiles/mongoc_shared.dir/src/mongoc/mongoc-cluster.c.o
CMakeFiles/mongoc_shared.dir/src/mongoc/ mongoc-cluster-sasl.c.o
CMakeFiles/mongoc_shared.dir/src/mongoc/mongoc-collection.c.o
CMakeFiles/mongoc_shared.dir/src/mongoc/mongoc-compression.c.o
CMakeFiles/mongoc_shared.dir/src/mongoc/mongoc-counters.c.o
CMakeFiles/mongoc_shared.dir/src/mongoc/mongoc-cursor-array.c.o
CMakeFiles/mongoc_shared.dir/src/mongoc/mongoc-cursor.c.o
CMakeFiles/mongoc_shared.dir/src/mongoc/mongoc-cursor-cmd.c.o
CMakeFiles/mongoc
_shared.dir/src/mongoc/mongoc-cursor-cmd-deprecated.c.o
CMakeFiles/mongoc_shared.dir/src/mongoc/mongoc-cursor-find.c.o
CMakeFiles/mongoc_shared.dir/src/mongoc/mongoc-cursor-find-cmd.c.o
CMakeFiles/mongoc_s
hared.dir/src/mongoc/mongoc-cursor-find-opquery.c.o
CMakeFiles/mongoc_shared.dir/src/mongoc/mongoc-cursor-legacy.c.o
CMakeFiles/mongoc_shared.dir/src/mongoc/mongoc-database.c.o
CMakeFiles/mongoc_shared.dir
/src/mongoc/mongoc-error.c.o
CMakeFiles/mongoc_shared.dir/src/mongoc/mongoc-find-and-modify.c.o
CMakeFiles/mongoc_shared.dir/src/mongoc/mongoc-init.c.o
CMakeFiles/mongoc_shared.dir/src/mongoc/mongoc-gridfs.c.o
CMakeFiles/mongoc_shared.dir/src/mongoc/mongoc-gridfs-file.c.o
CMakeFiles/mongoc_shared.dir/src/mongoc/mongoc-gridfs-file-list.c.o
CMakeFiles/mongoc_shared.dir/src/mongoc/mongoc-gridfs-file-page.c.o C
MakeFiles/mongoc_shared.dir/src/mongoc/mongoc-handshake.c.o
CMakeFiles/mongoc_shared.dir/src/mongoc/mongoc-host-list.c.o
CMakeFiles/mongoc_shared.dir/src/mongoc/mongoc-index.c.o
CMakeFiles/mongoc_shared.dir/src/mongoc/mongoc-list.c.o
CMakeFiles/mongoc_shared.dir/src/mongoc/mongoc-linux-distro-scanner.c.o
CMakeFiles/mongoc_shared.dir/src/mongoc/mongoc-log.c.o
CMakeFiles/mongoc_shared.dir/src/mongoc/mongoc-ma
tcher.c.o CMakeFiles/mongoc_shared.dir/src/mongoc/mongoc-matcher-op.c.o
CMakeFiles/mongoc_shared.dir/src/mongoc/mongoc-memcmp.c.o
CMakeFiles/mongoc_shared.dir/src/mongoc/mongoc-cmd.c.o
CMakeFiles/mongoc_shared.dir/src/mongoc/mongoc-opts.c.o
CMakeFiles/mongoc_shared.dir/src/mongoc/mongoc-opts-helpers.c.o
CMakeFiles/mongoc_shared.dir/src/mongoc/mongoc-queue.c.o
CMakeFiles/mongoc_shared.dir/src/mongoc/mongoc-read-concern.c.o
CMakeFiles/mongoc_shared.dir/src/mongoc/mongoc-read-prefs.c.o
CMakeFiles/mongoc_shared.dir/src/mongoc/mongoc-rpc.c.o
CMakeFiles/mongoc_shared.dir/src/mongoc/mongoc-server-description.c.o
CMakeFiles/mongoc_shared.dir/src/mongoc/mongoc-server-stream.c.o
CMakeFiles/mongoc_shared.dir/src/mongoc/mongoc-client-session.c.o
CMakeFiles/mongoc_shared.dir/src/mongoc/mongoc-set.c.o
CMakeFiles/mongoc_shared.dir/src/mongoc/mongoc-socket.c.o
CMakeFiles/mongoc_shared.dir/src/mongoc/mongoc-stream-buffered.c.o
CMakeFiles/mongoc_shared.dir/src/mongoc/mongoc-stream.c.o
CMakeFiles/mongoc_shared.dir/src/mongoc/mongoc-stream-file.c.o
CMakeFiles/mongoc_shared.dir/src/mongoc/mongoc-stream-gridfs.c.o
CMakeFiles/mongoc_shared.dir/src/mongoc/mongoc-stream-socket.c.o
CMakeFiles/mongoc_shared.dir/src/mongoc/mongoc-topology.c.o
CMakeFiles/mongoc_shared.dir/src/mongoc/mongoc-topology-description.c.o
CMakeFiles/mongoc_shared.dir/src/mongoc/mongoc-topology-description-apm.c.o
CMakeFiles/mongoc_shared.dir/src/mongoc/mongoc-topology-scanner.c.o
CMakeFiles/mongoc_shared.dir/src/mongoc/mongoc-uri.c.o
CMakeFiles/mongoc_shared.dir/src/mongoc/mongoc-util.c.o
CMakeFiles/mongoc_shared.dir/src/mongoc/mongoc-version-functions.c.o
CMakeFiles/mongoc_shared.dir/src/mongoc/mongoc-write-command.c.o
CMakeFiles/mongoc_shared.dir/src/mongoc/mongoc-write-command-legacy.c.o
CMakeFiles/mongoc_shared.dir/src/mongoc/mongoc-write-concern.c.o
CMakeFiles/mongoc_shared.dir/__/common/common-b64.c.o
CMakeFiles/mongoc_shared.dir/src/mongoc/mongoc-crypto.c.o
CMakeFiles/mongoc_shared.dir/src/mongoc/mongoc-scram.c.o
CMakeFiles/mongoc_shared.dir/src/mongoc/mongoc-stream-tls.c.o
CMakeFiles/mongoc_shared.dir/src/mongoc/mongoc-ssl.c.o
CMakeFiles/mongoc_shared.dir/src/mongoc/mongoc-crypto-openssl.c.o
CMakeFiles/mongoc_shared.dir/src/mongoc/mongoc-rand-openssl.c.o
CMakeFiles/mongoc_shared.dir/src/mongoc/mongoc-stream-tls-openssl.c.o
CMakeFiles/mongoc_shared.dir/src/mongoc/mongoc-stream-tls-openssl-bio.c.o
CMakeFiles/mongoc_shared.dir/src/mongoc/mongoc-openssl.c.o
-Wl,-blibpath:/usr/local/lib:/opt/freeware/src/packages/BUILD/mongo-c-driver-1.11.0/64bit/src/libbson:/opt/freeware/lib64:/opt/freeware/lib:/opt/freeware/lib/gcc/powerpc-ibm-aix7.1.0.0/8.1.0:/usr/lib:/lib
/opt/freeware/lib/libssl.a /opt/freeware/lib/libcrypto.a -lrt -lresolv
/usr/local/lib/libsnappy.a /usr/lib/libz.so ../libbson/libbson-1.0.so
-pthread /usr/lib/librt.a /usr/lib/libm.a
collect2: fatal error: library libresolv not found
compilation terminated.
src/libmongoc/CMakeFiles/mongoc_shared.dir/build.make:1218: recipe for
target 'src/libmongoc/libmongoc-1.0.so' failed
gmake[2]: *** [src/libmongoc/libmongoc-1.0.so] Error 1
gmake[2]: Leaving directory
'/opt/freeware/src/packages/BUILD/mongo-c-driver-1.11.0/64bit'
CMakeFiles/Makefile2:667: recipe for target
'src/libmongoc/CMakeFiles/mongoc_shared.dir/all' failed
gmake[1]: *** [src/libmongoc/CMakeFiles/mongoc_shared.dir/all] Error 2
gmake[1]: Leaving directory
'/opt/freeware/src/packages/BUILD/mongo-c-driver-1.11.0/64bit'
Makefile:154: recipe for target 'all' failed
gmake: *** [all] Error 2

To solve it, we added instructions concerning AIX in the file
cmake/FindResSearch.cmake. You will find our patch as attachment.

Regards,
Séna


Séna Apeke
-Doctorant en Bio-mathématique au Laboratoire de traitement
de l'information médicale (LaTIM INSERM 1101) ;

-Ingénieur en modélisation des systèmes, traitement de signal et d'image.

"La parfaite valeur est de faire sans témoins ce qu'on

  • serait capable de faire devant tout le monde." *
    (La Rochefoucauld)
Comment by A. Jesse Jiryu Davis [ 10/Aug/18 ]

Specifically, if you paste your build command and its error output here we can help diagnose the issue.

Comment by A. Jesse Jiryu Davis [ 10/Aug/18 ]

You can submit a pull request at https://github.com/mongodb/mongo-c-driver

 

Can you tell me more about what the problem is with libresolv? The C Driver's CMake build scripts are designed to use libresolv if it is available, but the driver can still be built successfully even if libresolv is absent.

Generated at Wed Feb 07 21:16:21 UTC 2024 using Jira 9.7.1#970001-sha1:2222b88b221c4928ef0de3161136cc90c8356a66.