Distribution for Solaris Opteron with i386 ?

  • Hi,


    We are currently contemplating a DICOM Q/R functionality for our Pinnacle product and I am wondering if there is a distribution that might be available for a Solaris i386 Opteron ? I beleive that you might have talked to Dave Nelson or Scott Johnson about this. I have downloaded and run the Windows version and I like what I see. We have tried to get the LINUX version to work, but have had no luck. I would appreciate any direction you could provide.


    Thanks,
    Mike Courtney
    Philips Medical Systems

  • I dont have the output handy since I had to ask our administrator to do it since su reqd to do things in /usr/lib directory. However, here are a few of the problems run into thus far running 'make install' (didnt see a ./configure to run ... which was first suprise):
    - had to replace spaces with tabs for install directives
    - there is no subsecond sleep ... changed it to 'sleep 1'
    - there is no /sbin/ldconfig on our system
    - even when we got past all that in the Makefile (hackingly), the command 'dgate' points to /lib/ld-linux.so.2, which is of course not a valid Solaris call.


    And we are on a Solaris running SunOS 5.10 for i386 (i.e. Opteron)


    Thanks for your attention.
    Mike

  • For testing, you can ignore the the makefile so you won't have to ask for root access.
    The assumptions are that you have gnu make and gnu compiler. Gnu make is not as strict as the sun version and will work with spaces or tabs in the makefile.


    First compile dgate. If you don't have the gnu compiler installed you will have to replace g++ with the sun equivalent, probably c++

    Code
    g++ -DUNIX -DNATIVE_ENDIAN=1 -DNOINTJPEG total.cxx -o dgate -lpthread


    This will create a binary using dbase as the database.
    Assuming it compiles OK you can then run

    Code
    ./dgate -i
    ./dgate -vr


    The default is to use port 5678 and aetitle CONQUESTSRV1


    If you don't need the built-in web interface then the program can be run from any directory. The files you need are:
    dgate
    dicom.ini
    dgatesop.lst
    dicom.sql
    dgate.dic
    acrnema.map

  • No file attachment unfortunately. You can expect a lot of warnings, but there should not be any errors.
    I will try to download and install solaris 10 so I can compile conquest myself and give you the binary.

  • Since the attachment did not take, here are some of the erros that occured. Thanks for your assistance !


    Mike


    In file included from total.cxx:62:
    rtc.cxx:63:5: warning: multi-character character constant
    rtc.cxx:77:5: warning: multi-character character constant
    In file included from total.cxx:64:
    qrsop.cxx: In member function `BOOL StandardRetrieve::Read(PDU_Service*, DICOMCo
    mmandObject*)':
    qrsop.cxx:138: error: expected primary-expression before '*' token
    qrsop.cxx:241: error: non-lvalue in unary `&'
    qrsop.cxx:245: error: base operand of `->' is not a pointer


    In file included from total.cxx:79:
    deivr.cxx:276:23: warning: multi-character character constant
    In file included from total.cxx:83:
    nkiqrsop.cxx: In member function `BOOL StandardRetrieveNKI::Read(PDU_Service*, D
    ICOMCommandObject*, void*)':
    nkiqrsop.cxx:259: error: expected primary-expression before '*' token
    nkiqrsop.cxx:413: error: non-lvalue in unary `&'
    nkiqrsop.cxx:452: error: base operand of `->' is not a pointer

  • Hi,


    please ignore the warning: multi-character character constant, it is in the core design and the code is OK for bigendian and littleendian machines.


    Both other errors indicate that StandardStorage is not defined. Can you check that file storage.hpp is compiling, are these the first ERROR messages?


    Marcel

  • Hi,


    apparently Solaris defines StandardStorage for itself. Try to rename StandardStorage to e.g., ConquestStandardStorage in dgate.cpp, nkiqrsop.cxx, nkiqrsop.hpp, qrsop.cxx, qrsop.hpp, storage.cxx and storage.hpp and then compile.


    Marcel

  • Thank you for the weekend reply Marcel.


    Modifying from StandardStorage to ConquestStandardStorage got me past some of the errors. Now there is a whole new set, of which the first ones are shown here:


    qrsop.cxx: In member function `BOOL StandardRetrieve::Read(PDU_Service*, DICOMCommandObject*)':
    qrsop.cxx:138: error: expected primary-expression before '*' token
    qrsop.cxx:241: error: non-lvalue in unary `&'
    qrsop.cxx:245: error: base operand of `->' is not a pointer


    nkiqrsop.cxx: In member function `BOOL StandardRetrieveNKI::Read(PDU_Service*, DICOMCommandObject*, void*)':
    nkiqrsop.cxx:259: error: expected primary-expression before '*' token
    nkiqrsop.cxx:413: error: non-lvalue in unary `&'
    nkiqrsop.cxx:452: error: base operand of `->' is not a pointer


    dgate.cpp: At global scope:
    dgate.cpp:4228: error: redefinition of `struct queue'
    /usr/include/sys/stream.h:67: error: previous definition of `struct queue'
    dgate.cpp:4253: error: invalid type in declaration before ';' token
    dgate.cpp: In function `BOOL processthread(queue*)':
    dgate.cpp:4258: error: 'struct queue' has no member named 'entrysize'
    dgate.cpp:4262: error: 'struct queue' has no member named 'critical'
    dgate.cpp:4264: error: 'struct queue' has no member named 'top'
    . . . many more down to
    DICOMCommandObject*, Array<DICOMDataObject*>*, void*)
    dgate.cpp: In member function `BOOL MyPatientStudyOnlyRetrieveGeneric::RetrieveOn(DICOMDataObject*, DICOMDataObject**, ConquestStandardStorage**)':
    dgate.cpp:9409: error: `pADDO' undeclared (first use this function)
    dgate.cpp:9409: error: `ExtraBytes' undeclared (first use this function)
    dgate.cpp: In member function `virtual BOOL StorageApp::ServerChild(int)':
    dgate.cpp:10689: error: `malloc_stats' undeclared (first use this function)


    Thanks again,
    Mike

  • Hi,


    you seem to have failed to redefine StandardStorage in all files: the first 2 error messages relate to StandardStorage and were the same that were listed before. The next message means that private symbol queue in dgate already exists in solaris. Rename queue to conquest_queue in all places in that file.


    Marcel

  • Greetings Marcel,


    I have double-checked and I find no occurances of StandardStorage anywhere. They are all now ConquestStandardStorage, so I am confused by this.


    I renamed all queue to conquest_queue and ran g++ command again. I attempted to upload the resulting output, but it keeps complaining about invalid extensions (I tried both .txt and none). So I have included it here in its entiretly. :-/


    Regards,
    Mike


    In file included from total.cxx:52:
    filepdu.cxx:201:18: warning: multi-character character constant
    ..
    dgate.cpp:10689: error: `malloc_stats' undeclared (first use this function)

  • My apologies Marcel,


    I sent you the wrong output version (I am evaluating several tools at once and getting confused what is where). Here is the output, minus the warnings. If you still want the files, I can send them. If so, please provide appropriate addr to send to (since upload issues).


    Thanks again,
    Mike


    In file included from total.cxx:64:
    qrsop.cxx: In member function `BOOL StandardRetrieve::Read(PDU_Service*, DICOMCommandObject*)':
    qrsop.cxx:138: error: expected primary-expression before '*' token
    qrsop.cxx:241: error: non-lvalue in unary `&'
    qrsop.cxx:245: error: base operand of `->' is not a pointer



    In file included from total.cxx:83:
    nkiqrsop.cxx: In member function `BOOL StandardRetrieveNKI::Read(PDU_Service*, DICOMCommandObject*, void*)':
    nkiqrsop.cxx:259: error: expected primary-expression before '*' token
    nkiqrsop.cxx:413: error: non-lvalue in unary `&'
    nkiqrsop.cxx:452: error: base operand of `->' is not a pointer
    In file included from total.cxx:83:



    In file included from total.cxx:85:
    dgate.cpp: At global scope:
    dgate.cpp:8968: error: expected `,' or `...' before numeric constant
    dgate.cpp: In function `BOOL RetrieveOn(DICOMDataObject*, DICOMDataObject**, ConquestStandardStorage**)':
    dgate.cpp:8988: error: `ExtraBytes' undeclared (first use this function)
    dgate.cpp:8988: error: (Each undeclared identifier is reported only once for each function it appears in.)
    dgate.cpp:8994: error: `pADDO' undeclared (first use this function)
    dgate.cpp:9005: error: `pDCO' undeclared (first use this function)
    dgate.cpp:9184: error: `RTCStorage' undeclared (first use this function)
    dgate.cpp:9185: error: invalid type argument of `unary *'
    dgate.cpp:9301: error: invalid type argument of `unary *'
    dgate.cpp: At global scope:
    dgate.cpp:9310: error: expected `,' or `...' before numeric constant
    dgate.cpp: In member function `virtual BOOL MyPatientRootRetrieve::RetrieveOn(DICOMDataObject*, DICOMDataObject**, ConquestStandardStorage**)':
    dgate.cpp:9313: error: invalid conversion from `int' to `ConquestStandardStorage**'
    dgate.cpp:8973: error: too many arguments to function `BOOL RetrieveOn(DICOMDataObject*, DICOMDataObject**, ConquestStandardStorage**)'
    dgate.cpp:9313: error: at this point in file
    dgate.cpp: At global scope:
    dgate.cpp:9319: error: expected `,' or `...' before numeric constant
    dgate.cpp:9323: error: prototype for `BOOL MyPatientRootRetrieveNKI::RetrieveOn(DICOMDataObject*, DICOMDataObject**, ConquestStandardStorage**)' does not match any in class `MyPatientRootRetrieveNKI'
    dgate.cpp:6678: error: candidate is: virtual BOOL MyPatientRootRetrieveNKI::RetrieveOn(DICOMDataObject*, DICOMDataObject**, ConquestStandardStorage**, DICOMCommandObject*, Array<DICOMDataObject*>*, void*)
    dgate.cpp: In member function `BOOL MyPatientRootRetrieveNKI::RetrieveOn(DICOMDataObject*, DICOMDataObject**, ConquestStandardStorage**)':
    dgate.cpp:9326: error: `pDCO' undeclared (first use this function)
    dgate.cpp:9326: error: `pADDO' undeclared (first use this function)
    dgate.cpp:9326: error: `ExtraBytes' undeclared (first use this function)
    dgate.cpp: At global scope:
    dgate.cpp:9332: error: expected `,' or `...' before numeric constant
    dgate.cpp:9336: error: prototype for `BOOL MyPatientRootRetrieveGeneric::RetrieveOn(DICOMDataObject*, DICOMDataObject**, ConquestStandardStorage**)' does not match any in class `MyPatientRootRetrieveGeneric'
    dgate.cpp:6694: error: candidate is: virtual BOOL MyPatientRootRetrieveGeneric::RetrieveOn(DICOMDataObject*, DICOMDataObject**, ConquestStandardStorage**, DICOMCommandObject*, Array<DICOMDataObject*>*, void*)
    dgate.cpp: In member function `BOOL MyPatientRootRetrieveGeneric::RetrieveOn(DICOMDataObject*, DICOMDataObject**, ConquestStandardStorage**)':
    dgate.cpp:9339: error: `pADDO' undeclared (first use this function)
    dgate.cpp:9339: error: `ExtraBytes' undeclared (first use this function)
    dgate.cpp: At global scope:
    dgate.cpp:9345: error: expected `,' or `...' before numeric constant
    dgate.cpp: In member function `virtual BOOL MyStudyRootRetrieve::RetrieveOn(DICOMDataObject*, DICOMDataObject**, ConquestStandardStorage**)':
    dgate.cpp:9348: error: invalid conversion from `int' to `ConquestStandardStorage**'
    dgate.cpp:8973: error: too many arguments to function `BOOL RetrieveOn(DICOMDataObject*, DICOMDataObject**, ConquestStandardStorage**)'
    dgate.cpp:9348: error: at this point in file
    dgate.cpp: At global scope:
    dgate.cpp:9354: error: expected `,' or `...' before numeric constant
    dgate.cpp:9358: error: prototype for `BOOL MyStudyRootRetrieveNKI::RetrieveOn(DICOMDataObject*, DICOMDataObject**, ConquestStandardStorage**)' does not match any in class `MyStudyRootRetrieveNKI'
    dgate.cpp:6723: error: candidate is: virtual BOOL MyStudyRootRetrieveNKI::RetrieveOn(DICOMDataObject*, DICOMDataObject**, ConquestStandardStorage**, DICOMCommandObject*, Array<DICOMDataObject*>*, void*)
    dgate.cpp: In member function `BOOL MyStudyRootRetrieveNKI::RetrieveOn(DICOMDataObject*, DICOMDataObject**, ConquestStandardStorage**)':
    dgate.cpp:9361: error: `pDCO' undeclared (first use this function)
    dgate.cpp:9361: error: `pADDO' undeclared (first use this function)
    dgate.cpp:9361: error: `ExtraBytes' undeclared (first use this function)
    dgate.cpp: At global scope:
    dgate.cpp:9367: error: expected `,' or `...' before numeric constant
    dgate.cpp:9371: error: prototype for `BOOL MyStudyRootRetrieveGeneric::RetrieveOn(DICOMDataObject*, DICOMDataObject**, ConquestStandardStorage**)' does not match any in class `MyStudyRootRetrieveGeneric'
    dgate.cpp:6739: error: candidate is: virtual BOOL MyStudyRootRetrieveGeneric::RetrieveOn(DICOMDataObject*, DICOMDataObject**, ConquestStandardStorage**, DICOMCommandObject*, Array<DICOMDataObject*>*, void*)
    dgate.cpp: In member function `BOOL MyStudyRootRetrieveGeneric::RetrieveOn(DICOMDataObject*, DICOMDataObject**, ConquestStandardStorage**)':
    dgate.cpp:9374: error: `pADDO' undeclared (first use this function)
    dgate.cpp:9374: error: `ExtraBytes' undeclared (first use this function)
    dgate.cpp: At global scope:
    dgate.cpp:9380: error: expected `,' or `...' before numeric constant
    dgate.cpp: In member function `virtual BOOL MyPatientStudyOnlyRetrieve::RetrieveOn(DICOMDataObject*, DICOMDataObject**, ConquestStandardStorage**)':
    dgate.cpp:9383: error: invalid conversion from `int' to `ConquestStandardStorage**'
    dgate.cpp:8973: error: too many arguments to function `BOOL RetrieveOn(DICOMDataObject*, DICOMDataObject**, ConquestStandardStorage**)'
    dgate.cpp:9383: error: at this point in file
    dgate.cpp: At global scope:
    dgate.cpp:9389: error: expected `,' or `...' before numeric constant
    dgate.cpp:9393: error: prototype for `BOOL MyPatientStudyOnlyRetrieveNKI::RetrieveOn(DICOMDataObject*, DICOMDataObject**, ConquestStandardStorage**)' does not match any in class `MyPatientStudyOnlyRetrieveNKI'
    dgate.cpp:6768: error: candidate is: virtual BOOL MyPatientStudyOnlyRetrieveNKI::RetrieveOn(DICOMDataObject*, DICOMDataObject**, ConquestStandardStorage**, DICOMCommandObject*, Array<DICOMDataObject*>*, void*)
    dgate.cpp: In member function `BOOL MyPatientStudyOnlyRetrieveNKI::RetrieveOn(DICOMDataObject*, DICOMDataObject**, ConquestStandardStorage**)':
    dgate.cpp:9396: error: `pDCO' undeclared (first use this function)
    dgate.cpp:9396: error: `pADDO' undeclared (first use this function)
    dgate.cpp:9396: error: `ExtraBytes' undeclared (first use this function)
    dgate.cpp: At global scope:
    dgate.cpp:9402: error: expected `,' or `...' before numeric constant
    dgate.cpp:9406: error: prototype for `BOOL MyPatientStudyOnlyRetrieveGeneric::RetrieveOn(DICOMDataObject*, DICOMDataObject**, ConquestStandardStorage**)' does not match any in class `MyPatientStudyOnlyRetrieveGeneric'
    dgate.cpp:6784: error: candidate is: virtual BOOL MyPatientStudyOnlyRetrieveGeneric::RetrieveOn(DICOMDataObject*, DICOMDataObject**, ConquestStandardStorage**, DICOMCommandObject*, Array<DICOMDataObject*>*, void*)
    dgate.cpp: In member function `BOOL MyPatientStudyOnlyRetrieveGeneric::RetrieveOn(DICOMDataObject*, DICOMDataObject**, ConquestStandardStorage**)':
    dgate.cpp:9409: error: `pADDO' undeclared (first use this function)
    dgate.cpp:9409: error: `ExtraBytes' undeclared (first use this function)
    dgate.cpp: In member function `virtual BOOL StorageApp::ServerChild(int)':
    dgate.cpp:10689: error: `malloc_stats' undeclared (first use this function)

  • Hi,


    I think I found the problems (I downloaded a solaris 10 update 1 virtual machine) by looking at the preprocessed total.cxx file.


    Go back to an original release (1.4.14beta), and edit storage.hpp, by adding at the end:


    Code
    #define SS SStorage#define queue conquest_queue#define malloc_stats() ;


    This redefines 2 duplicate and one missing symbol. I will fix the source code in a nicer way later.


    Then compile with:


    Code
    /usr/sfw/bin/g++ -DUNIX -DNATIVE_ENDIAN=1 -DNOINTJPEG total.cxx -o dgate -lpthread -lsocket -lnsl -lposix4


    then run:


    Code
    dgate -v -r
    dgate -v


    Now you have a running conquest server (dbaseIII database). The dgate process needs to be started at boot I guess, but I am not a solaris expert. Then proceed to use the same dgate as cgi web server. See the maklinux script(s) how this is done. There is also a script for use with the sqlite database.


    Marcel

  • Greetings Marcel,


    I downloaded the beta version and edited the file as you said.
    My system doesnt have /usr/sfw/bin/g++ so Iused /usr/local/bin/g++. It compiled with no errors. Only warnings.
    I then ran 'dgate -v -r' and got:


    ld.so.1: dgate: fatal: libstdc++.so.5: open failed: No such file or directory
    Killed


    So i went back and recompiled with (note the -B to tell compiler to include dir where the .so.5 file is on my system):
    > /usr/local/bin/g++ -DUNIX -DNATIVE_ENDIAN=1 -DNOINTJPEG total.cxx -o dgate -lpthread -lsocket -lnsl -lposix4
    -B /usr/local/lib/ -print-search-dirs
    Then tried again and got the same error. :-( I checked dgate timestamp to make sure that it had indeed recompiled and it had.


    I thried running dgate with -help and --help to see if any other runtime options, but there arent any.
    If I dont get this working today (thursday here in US) then I dont think we will be able to use ConQuest with our Solaris distro, unless via a Windows emulator or VMWare somehow. We have to make a decision quickly.


    I hope you get this today your time and have some ideas to get this going.


    Thank you again,
    Mike Courtney
    Philips Medical Systems

  • Hi Mike,


    I assume your g++ is somehow incompletely installed or maybe a lib path is incorrect. I do not have to do anything special to load the library??


    I also fixed the distro for the SUNpro compiler - which you default use. I will send that to you by email. The SUNpro command line will be (this is for UNRELEASED VERSION 1.4.14):


    /opt/SUNWspro/bin/CC -w -DUNIX -DNATIVE_ENDIAN=1 -DNOINTJPEG -DSOLARIS total.cxx -o dgate -lpthread -lsocket -lnsl -lposix4


    Marcel

  • Check if all the libraries are found with ldd ./dgate it should produce something like this:
    libpthread.so.1 => /lib/libpthread.so.1
    libsocket.so.1 => /lib/libsocket.so.1
    libnsl.so.1 => /lib/libnsl.so.1
    librt.so.1 => /lib/librt.so.1
    libstdc++.so.6 => /usr/sfw/lib/libstdc++.so.6
    libm.so.2 => /lib/libm.so.2
    libgcc_s.so.1 => /usr/sfw/lib/libgcc_s.so.1
    libc.so.1 => /lib/libc.so.1
    libmp.so.2 => /lib/libmp.so.2
    libmd.so.1 => /lib/libmd.so.1
    libscf.so.1 => /lib/libscf.so.1
    libaio.so.1 => /lib/libaio.so.1
    libdoor.so.1 => /lib/libdoor.so.1
    libuutil.so.1 => /lib/libuutil.so.1
    libgen.so.1 => /lib/libgen.so.1


    You may need to set the envronment variable LD_CONFIG_PATH first if /libstdc++.so.5 is in /usr/local/lib.

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!