aren't the Base*Libs there in case you want to override existing
implementations or implement custom versions of them? I'm pretty sure
that's the logic behind it -- its a hack of sorts to try to get OOP out
of a purely procedural language. It works, but I don't think its
necessarily ideal. But there really isn't much of an alternative. Then
again, I might be wrong, too...
On 5/25/22 23:04, Andrew Fish via groups.io wrote:
On May 25, 2022, at 9:23 AM, M.T. <xzavierpo...@gmail.com
<mailto:xzavierpo...@gmail.com>> wrote:
Hello
I'm working on a small UEFI shell app.
I was hoping to make use of the JsonLib found in the Redfish Package.
When I include the Redfish JsonLib and it's dependencies:
JsonLib|RedfishPkg/Library/JsonLib/JsonLib.inf
Ucs2Utf8Lib|RedfishPkg/Library/BaseUcs2Utf8Lib/BaseUcs2Utf8Lib.inf
RedfishCrtLib|RedfishPkg/PrivateLibrary/RedfishCrtLib/RedfishCrtLib.inf
BaseSortLib|MdeModulePkg/Library/BaseSortLib/BaseSortLib.inf
BaseSortLib has symbol clashes with SortLib resulting in the following:
It looks like BaseSortLib and and SortLib are the same library class so
you should only have one.
/Volumes/Case/edk2(master)*>*git grep --recurse-submodules SortLib --
\*.inf | grep LIBRARY_CLASS
MdeModulePkg/Library/BaseSortLib/BaseSortLib.inf:18: LIBRARY_CLASS
= SortLib
MdeModulePkg/Library/UefiSortLib/UefiSortLib.inf:18: LIBRARY_CLASS
= SortLib|UEFI_APPLICATION UEFI_DRIVER UEFI_DRIVER
DXE_RUNTIME_DRIVER DXE_DRIVER
/Volumes/Case/edk2(master)*>*git grep --recurse-submodules BaseSortLib
-- \*.inc
RedfishPkg/RedfishLibs.dsc.inc:16:*BaseSortLib*|MdeModulePkg/Library/*BaseSortLib*/*BaseSortLib*.inf
OK bingo bingo bingo….
The way the edk2 works is you have a library class that maps to the
include file. This is the name in the INF file that resolves linking.
You can have as many instances of the library class as you like. This is
why the DSC files have the <library class name>|<path to INF file>
syntax as you are letting the build pick which instance of the library
to use. You can control this per driver/app if you want.
It looks to me like BaseSortLib is an alias for SortLib and that is a
bit of hack.
You could try making sure that BaseSortLib and SortLib point to the same
library instance
The other option would be to edit RedfishCrtLib.inf and make BaseSortLib
SortLib
/Volumes/Case/edk2(master)*>*git grep --recurse-submodules BaseSortLib
-- \*.inf
MdeModulePkg/Library/BaseSortLib/BaseSortLib.inf:13: BASE_NAME
= *BaseSortLib*
MdeModulePkg/Library/BaseSortLib/BaseSortLib.inf:14: MODULE_UNI_FILE
= *BaseSortLib*.uni
MdeModulePkg/Library/BaseSortLib/BaseSortLib.inf:25:*BaseSortLib*.c
RedfishPkg/PrivateLibrary/RedfishCrtLib/RedfishCrtLib.inf:28:*BaseSortLib*
I’m note sure why this fake BaseSortLib exists. Looks like we would need
to ask Abner?
*
*
commit 6e9233f968735219b2038c5dd23a46be2c021807
Author: Abner Chang <abner.ch...@hpe.com <mailto:abner.ch...@hpe.com>>
Date: Fri Dec 4 12:30:05 2020 +0800
RedfishPkg/RedfishCrtLib: Redfish C runtime library
Redfish CRT library is currently used by edk2 JsonLib
(open source jansson project) and edk2 RedfishLib
(libredfish open source project). Redfish CrtLib library
provides the necessary C runtime equivalent edk2 functions
for open source projects.
Signed-off-by: Abner Chang <abner.ch...@hpe.com
<mailto:abner.ch...@hpe.com>>
Cc: Leif Lindholm <l...@nuviainc.com <mailto:l...@nuviainc.com>>
Cc: Nickle Wang <nickle.w...@hpe.com <mailto:nickle.w...@hpe.com>>
Cc: Peter O'Hanley <peter.ohan...@hpe.com
<mailto:peter.ohan...@hpe.com>>
Reviewed-by: Nickle Wang <nickle.w...@hpe.com
<mailto:nickle.w...@hpe.com>>
Acked-by: Leif Lindholm <l...@nuviainc.com <mailto:l...@nuviainc.com>>
Reviewed-by: Michael D Kinney <michael.d.kin...@intel.com
<mailto:michael.d.kin...@intel.com>>
*
*
Thanks,
Andrew Fish
/usr/bin/ld: UefiSortLib.obj (symbol from plugin): in function
`PerformQuickSort':
(.text+0x0): multiple definition of `PerformQuickSort';
BaseSortLib.obj (symbol from plugin):(.text+0x0): first defined here
/usr/bin/ld: UefiSortLib.obj (symbol from plugin): in function
`PerformQuickSort':
(.text+0x0): multiple definition of `DevicePathCompare';
BaseSortLib.obj (symbol from plugin):(.text+0x0): first defined here
/usr/bin/ld: UefiSortLib.obj (symbol from plugin): in function
`PerformQuickSort':
(.text+0x0): multiple definition of `StringNoCaseCompare';
BaseSortLib.obj (symbol from plugin):(.text+0x0): first defined here
/usr/bin/ld: UefiSortLib.obj (symbol from plugin): in function
`PerformQuickSort':
(.text+0x0): multiple definition of `StringCompare'; BaseSortLib.obj
(symbol from plugin):(.text+0x0): first defined here
I need SortLib for UEFIShell dependencies, and I need BaseSortLib for
JsonLib.
Is there some way around this? Or is Redfish meant to be standalone?
Thank you in advance
xp
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#90034): https://edk2.groups.io/g/devel/message/90034
Mute This Topic: https://groups.io/mt/91336682/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-