diff --git a/msbuild/Xamarin.MacDev.Tasks/LinkerOptions.cs b/msbuild/Xamarin.MacDev.Tasks/LinkerOptions.cs
index 587ab4e81a5e..2e1ed61cc37d 100644
--- a/msbuild/Xamarin.MacDev.Tasks/LinkerOptions.cs
+++ b/msbuild/Xamarin.MacDev.Tasks/LinkerOptions.cs
@@ -59,17 +59,19 @@ public void BuildNativeReferenceFlags (TaskLoggingHelper Log, ITaskItem [] Nativ
} else if (kind == NativeReferenceKind.Dynamic) {
var path = item.ItemSpec;
var directory = Path.GetDirectoryName (path);
- if (!string.IsNullOrEmpty (directory) && !libraryPaths.Contains (directory)) {
- Arguments.AddQuoted ("-L" + directory);
- libraryPaths.Add (directory);
- }
- // remove extension + "lib" prefix
var lib = Path.GetFileName (path);
- if (lib.EndsWith (".dylib", StringComparison.OrdinalIgnoreCase))
- lib = Path.GetFileNameWithoutExtension (lib);
- if (lib.StartsWith ("lib", StringComparison.OrdinalIgnoreCase))
- lib = lib.Substring (3);
- Arguments.AddQuoted ("-l" + lib);
+ if (lib.StartsWith ("lib", StringComparison.Ordinal)) {
+ if (!string.IsNullOrEmpty (directory) && !libraryPaths.Contains (directory)) {
+ Arguments.AddQuoted ("-L" + directory);
+ libraryPaths.Add (directory);
+ }
+ // remove extension + "lib" prefix
+ if (lib.EndsWith (".dylib", StringComparison.OrdinalIgnoreCase))
+ lib = Path.GetFileNameWithoutExtension (lib);
+ Arguments.AddQuoted ("-l" + lib.Substring (3));
+ } else {
+ Arguments.AddQuoted (path);
+ }
} else {
Log.LogWarning (MSBStrings.W0052, item.ItemSpec);
continue;
diff --git a/msbuild/Xamarin.MacDev.Tasks/Tasks/LinkNativeCodeTaskBase.cs b/msbuild/Xamarin.MacDev.Tasks/Tasks/LinkNativeCodeTaskBase.cs
index 111798dd91e5..c22603db13f7 100644
--- a/msbuild/Xamarin.MacDev.Tasks/Tasks/LinkNativeCodeTaskBase.cs
+++ b/msbuild/Xamarin.MacDev.Tasks/Tasks/LinkNativeCodeTaskBase.cs
@@ -141,11 +141,13 @@ bool ExecuteUnsafe ()
arguments.Add (lib);
break;
case ".dylib":
- arguments.Add ("-L" + Path.GetDirectoryName (lib));
var libName = Path.GetFileNameWithoutExtension (lib);
- if (libName.StartsWith ("lib", StringComparison.Ordinal))
- libName = libName.Substring (3);
- arguments.Add ("-l" + libName);
+ if (libName.StartsWith ("lib", StringComparison.Ordinal)) {
+ arguments.Add ("-L" + Path.GetDirectoryName (lib));
+ arguments.Add ("-l" + libName.Substring (3));
+ } else {
+ arguments.Add (libSpec.ItemSpec);
+ }
hasDylibs = true;
break;
case ".framework":
diff --git a/tests/dotnet/BundleStructure/AppDelegate.cs b/tests/dotnet/BundleStructure/AppDelegate.cs
index db627351190b..95b030d9bdb4 100644
--- a/tests/dotnet/BundleStructure/AppDelegate.cs
+++ b/tests/dotnet/BundleStructure/AppDelegate.cs
@@ -13,5 +13,8 @@ static int Main (string [] args)
return args.Length;
}
+
+ [DllImport ("__Internal")]
+ static extern IntPtr getNoLibPrefix ();
}
}
diff --git a/tests/dotnet/BundleStructure/shared.csproj b/tests/dotnet/BundleStructure/shared.csproj
index 799c139bd9db..b4bda31eb98e 100644
--- a/tests/dotnet/BundleStructure/shared.csproj
+++ b/tests/dotnet/BundleStructure/shared.csproj
@@ -178,6 +178,8 @@
+
+
diff --git a/tests/dotnet/UnitTests/BundleStructureTest.cs b/tests/dotnet/UnitTests/BundleStructureTest.cs
index 1ba8decc9444..6d9c7d92622d 100644
--- a/tests/dotnet/UnitTests/BundleStructureTest.cs
+++ b/tests/dotnet/UnitTests/BundleStructureTest.cs
@@ -227,6 +227,8 @@ internal static void CheckAppBundleContents (ApplePlatform platform, IEnumerable
AddExpectedFrameworkFiles (platform, expectedFiles, "Framework.With.Dots", isSigned); // https://github.com/xamarin/xamarin-macios/issues/15727
+ expectedFiles.Add (Path.Combine (assemblyDirectory, "NoLibPrefix.dylib")); // https://github.com/xamarin/xamarin-macios/issues/15044
+
expectedFiles.Add (Path.Combine (resourcesDirectory, "ContentA.txt"));
expectedFiles.Add (Path.Combine (resourcesDirectory, "ContentB.txt"));
expectedFiles.Add (Path.Combine (resourcesDirectory, "ContentC.txt"));
diff --git a/tests/test-libraries/libraries/Makefile b/tests/test-libraries/libraries/Makefile
index a27609a8fcde..9baabea83ee9 100644
--- a/tests/test-libraries/libraries/Makefile
+++ b/tests/test-libraries/libraries/Makefile
@@ -2,6 +2,7 @@ TOP=../../..
include $(TOP)/Make.config
NAMES+=NoneE NoneF UnknownD SomewhatUnknownD SkipInstallNameTool
+NOPREFIX+=NoLibPrefix
NO_INSTALL_NAME_TOOL_SkipInstallNameTool=1
@@ -32,33 +33,33 @@ maccatalyst-arm64_ARCHITECTURES=arm64
define DotNetTemplate
$(1)_$(3)_TARGETS += \
- .libs/$(3)/lib$(1).a \
- .libs/$(3)/lib$(1).o \
- .libs/$(3)/lib$(1).dylib \
- .libs/$(3)/lib$(1).so \
+ .libs/$(3)/$(4)$(1).a \
+ .libs/$(3)/$(4)$(1).o \
+ .libs/$(3)/$(4)$(1).dylib \
+ .libs/$(3)/$(4)$(1).so \
$(3)_TARGETS += \
$$($(1)_$(3)_TARGETS) \
all-local:: $$($(3)_TARGETS)
-.libs/$(3)/lib$(1).dylib: shared.c | .libs/$(3)
+.libs/$(3)/$(4)$(1).dylib: shared.c | .libs/$(3)
$$(call Q_2,CC, [$(3)]) $$(XCODE_CC) -o $$@ $$(foreach arch,$$($(3)_ARCHITECTURES),-arch $$(arch)) $$($(2)_COMPILER_FLAGS) $$($(3)_COMPILER_FLAGS) -DNAME=$(1) -shared -framework Foundation -lz
ifneq ($(NO_INSTALL_NAME_TOOL_$(1)),1)
- $$(Q) $(XCODE_DEVELOPER_ROOT)/Toolchains/XcodeDefault.xctoolchain/usr/bin/install_name_tool -id @rpath/lib$(1).dylib $$@
+ $$(Q) $(XCODE_DEVELOPER_ROOT)/Toolchains/XcodeDefault.xctoolchain/usr/bin/install_name_tool -id @rpath/$(4)$(1).dylib $$@
endif
-.libs/$(3)/lib$(1).o: shared.c | .libs/$(3)
+.libs/$(3)/$(4)$(1).o: shared.c | .libs/$(3)
$$(call Q_2,CC, [$(3)]) $$(XCODE_CC) -o $$@ $$(foreach arch,$$($(3)_ARCHITECTURES),-arch $$(arch)) $$($(2)_COMPILER_FLAGS) $$($(3)_COMPILER_FLAGS) -DNAME=$(1) -c
ifneq ($(NO_INSTALL_NAME_TOOL_$(1)),1)
- $$(Q) $(XCODE_DEVELOPER_ROOT)/Toolchains/XcodeDefault.xctoolchain/usr/bin/install_name_tool -id @rpath/lib$(1).dylib $$@
+ $$(Q) $(XCODE_DEVELOPER_ROOT)/Toolchains/XcodeDefault.xctoolchain/usr/bin/install_name_tool -id @rpath/$(4)$(1).dylib $$@
endif
-.libs/$(3)/lib$(1).a: .libs/$(3)/lib$(1).o
+.libs/$(3)/$(4)$(1).a: .libs/$(3)/$(4)$(1).o
$$(call Q_2,AR [$(1)]) $(XCODE_DEVELOPER_ROOT)/Toolchains/XcodeDefault.xctoolchain/usr/bin/ar cru $$@ $$<
-.libs/$(3)/lib$(1).so: .libs/$(3)/lib$(1).dylib
- $$(Q) $(CP) .libs/$(3)/lib$(1).dylib .libs/$(3)/lib$(1).so
+.libs/$(3)/$(4)$(1).so: .libs/$(3)/$(4)$(1).dylib
+ $$(Q) $(CP) .libs/$(3)/$(4)$(1).dylib .libs/$(3)/$(4)$(1).so
$$($(3)_$(1)_DIRECTORIES):
$$(Q) mkdir -p $$@
@@ -68,7 +69,8 @@ endef
# 1: name
# 2: sdk platform (iphoneos, iphonesimulator, tvos, tvsimulator, maccatalyst, mac)
# 3: runtime identifier
-$(foreach name,$(NAMES),$(foreach platform,$(DOTNET_PLATFORMS),$(foreach rid,$(DOTNET_$(platform)_RUNTIME_IDENTIFIERS),$(eval $(call DotNetTemplate,$(name),$(DOTNET_$(rid)_SDK_PLATFORM),$(rid))))))
+$(foreach name,$(NAMES),$(foreach platform,$(DOTNET_PLATFORMS),$(foreach rid,$(DOTNET_$(platform)_RUNTIME_IDENTIFIERS),$(eval $(call DotNetTemplate,$(name),$(DOTNET_$(rid)_SDK_PLATFORM),$(rid),lib)))))
+$(foreach name,$(NOPREFIX),$(foreach platform,$(DOTNET_PLATFORMS),$(foreach rid,$(DOTNET_$(platform)_RUNTIME_IDENTIFIERS),$(eval $(call DotNetTemplate,$(name),$(DOTNET_$(rid)_SDK_PLATFORM),$(rid))))))
$(foreach platform,$(DOTNET_PLATFORMS),$(foreach rid,$(DOTNET_$(platform)_RUNTIME_IDENTIFIERS),.libs/$(rid))):
$(Q) mkdir -p $@