Index: src/main/java/org/apache/commons/compress/archivers/tar/TarArchiveOutputStream.java
===================================================================
--- src/main/java/org/apache/commons/compress/archivers/tar/TarArchiveOutputStream.java	(révision 1510994)
+++ src/main/java/org/apache/commons/compress/archivers/tar/TarArchiveOutputStream.java	(copie de travail)
@@ -294,6 +294,35 @@
             }
         }
 
+        final String linkName = entry.getLinkName();
+        boolean paxHeaderContainsLinkPath = false;
+        if (linkName != null) {
+            final ByteBuffer encodedLink = encoding.encode(linkName);
+            final int linkLen = encodedLink.limit() - encodedLink.position();
+            if (linkLen >= TarConstants.NAMELEN) {
+
+                if (longFileMode == LONGFILE_POSIX) {
+                    paxHeaders.put("linkpath", linkName);
+                    paxHeaderContainsLinkPath = true;
+                } else if (longFileMode == LONGFILE_GNU) {
+                    // create a TarEntry for the LongLink, the contents
+                    // of which are the link's name
+                    TarArchiveEntry longLinkEntry = new TarArchiveEntry(TarConstants.GNU_LONGLINK,
+                                                                        TarConstants.LF_GNUTYPE_LONGLINK);
+
+                    longLinkEntry.setSize(linkLen + 1); // +1 for NUL
+                    putArchiveEntry(longLinkEntry);
+                    write(encodedLink.array(), encodedLink.arrayOffset(), linkLen);
+                    write(0); // NUL terminator
+                    closeArchiveEntry();
+                } else if (longFileMode != LONGFILE_TRUNCATE) {
+                    throw new RuntimeException("link name '" + linkName
+                                               + "' is too long ( > "
+                                               + TarConstants.NAMELEN + " bytes)");
+                }
+            }
+        }
+        
         if (bigNumberMode == BIGNUMBER_POSIX) {
             addPaxHeadersForBigNumbers(paxHeaders, entry);
         } else if (bigNumberMode != BIGNUMBER_STAR) {
@@ -305,7 +334,7 @@
             paxHeaders.put("path", entryName);
         }
 
-        if (addPaxHeadersForNonAsciiNames
+        if (addPaxHeadersForNonAsciiNames && !paxHeaderContainsLinkPath
             && (entry.isLink() || entry.isSymbolicLink())
             && !ASCII.canEncode(entry.getLinkName())) {
             paxHeaders.put("linkpath", entry.getLinkName());
